20193128付康 实验报告(四)

20193102 2019-2020-2 《Python程序设计》实验x报告

课程:《Python程序设计》
班级: 1931
姓名: 付康
学号:20193128
实验教师:王志强
实验日期:2020年6月10日
必修/选修: 公选课

1.实验内容

网上找了很多小游戏,最后觉得还是贪吃蛇比较好弄

2. 实验过程及结果

1.想要用 Python 写一个小游戏就不得不知道 pygame 这个库了
首先我们得有个窗口通过 pygame 的初始化就可以使用它提供给我们的工具了

导入pygame:

 

 



2.通过 set_model 方法可以设置窗口的大小:

 

 



3.通过 pygame 的 rect 方法
设置画布,每格的高度:

 

 

 


4.再画上蛇:

 

 

 

现在就成这样了

 

 



放上食物:(注意把食物的位置随机化)

 

 

 

  1. 接着定义一个蛇头的位置:

     

     


每次触发一个方向键就让蛇头的位置发生相应的变化然后更新蛇身的位置

 

 

 

 

 

  1. 然后加上食物

 

 

 

 

运行效果:

 

 

 

这就是大概过程。

下面是源代码:

# -*- coding:utf-8 -*-
import pygame
import random
 
caption_width = 500  #画布宽度
caption_height = 500 #画布高度
white_color = (255, 255, 255) # 白色rgb
black_color = (0, 0, 0)
game_title = '帅气的python'
cell = 10 # 格子
snake_init_pos = [[250,250], [240,250], [230,250], [220,250]] # 蛇的初始位置
food_pos = [random.randrange(1, 50) * 10, random.randrange(1, 50) * 10] # 食物初始随机位置
head_pos = [250, 250]
 
pygame.init() # 初始化 pygame
clock = pygame.time.Clock()
 
caption = pygame.display.set_mode((caption_width, caption_height))
pygame.display.set_caption(game_title)
 
def draw_rect(color, position):
    pygame.draw.rect(caption, color, pygame.Rect(position[0], position[1], cell, cell))
 
def hit_the_self():
    if snake_init_pos[0] in snake_init_pos[1:]:
        return True
    else:
        return False
 
def hit_the_wall(head_pos):
    if head_pos[0] >= caption_width or head_pos[0]<0 or head_pos[1] >= caption_height or head_pos[1] < 0:
        return True
    else:
        return False
 
def change_direction(head_pos):
    global food_pos
    snake_init_pos.insert(0, list(head_pos))
 
    if head_pos != food_pos:
        snake_init_pos.pop()
    else:
        food_pos = [random.randrange(1, 50) * 10, random.randrange(1, 50) * 10]
 
    if hit_the_self() or hit_the_wall(head_pos):
        # 给我死
        pygame.quit()
 
 
def main():
    for pos in snake_init_pos:
        draw_rect(white_color, pos)
 
    draw_rect(white_color, food_pos)
    pygame.display.update()
 
    while 1:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    head_pos[0] -= cell
                    change_direction(head_pos)
                elif event.key == pygame.K_RIGHT:
                    head_pos[0] += cell
                    change_direction(head_pos)
                elif event.key == pygame.K_UP:
                    head_pos[1] -= cell
                    change_direction(head_pos)
                elif event.key == pygame.K_DOWN:
                    head_pos[1] += cell
                    change_direction(head_pos)
 
        caption.fill(black_color)
        draw_rect(white_color, food_pos)
 
        for pos in snake_init_pos:
            draw_rect(white_color, pos)
 
        pygame.display.update()
        clock.tick(10)
 
 
 
if __name__ == '__main__':
    main()

3. 实验过程中遇到的问题和解决过程

  • 问题1:pygame的安装
  • 问题1解决方案:找百度,直接在pycharm的库里面安装不上,只能是在那个pycham中找到那个专门装其他库的地方,然后把那个包直接导进去
  • 问题2:案例的寻找及相关内容的学习
  • 问题2解决方案:在网上搜索相关的内容,边看视频边看代码,慢慢的照猫画虎,写了一个

全课总结

最开始报python选修也是很忐忑的,毕竟我之前没有接触过编程语言的学习,但开始上课后没有了忐忑却充满了惊奇。因此老师跟多的时以自学为主,通过观看云班课中的视频自学完成内容,之所以没有忐忑是因为视频中的讲解清晰明了,我可以此每次顺利完成作业。回顾整学期,循环、列表、类、元组、函数等等我都熟悉了知识点,而且每次作业虽然会遇到困难,但是通过自己查资料解决也使我有了自主学习的能力和解决问题的能力。我还是很喜欢老师这样的教学方式的,因为我现在越来越体会到自学的重要性,老师不是一直存在的,通过自己的资源和能力获取知识才是最可靠的。我没有更多的建议可以告诉老师,希望老师可以继续这样教学下去,通过独特的教学方式也让之后报这门选修的同学们领悟到自学的重要。
最后说一下这次实验的感想吧,这次实验其实我是完全自学的,游戏中很多的点都是云班课里没有讲过的,但好在互联网的发达看博客,看知乎就足以我去解决问题。很感谢记笔记的自己,之前的知识我也通过笔记运用到了这次实验中。

posted @ 2020-06-14 23:15  云殇⊙  阅读(155)  评论(0编辑  收藏