20192309 金一非 实验四报告

《Python程序设计》实验四报告
课程:《Python程序设计》
班级: 1923班
姓名: 金一非
学号: 20192309
实验教师:王志强
实验日期:2020年6月11日
必修/选修: 公选课
1.实验内容
Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等;
经过选择,我选择了编写一个游戏,为贪吃蛇。
2. 实验过程及结果
贪吃蛇主要是通过完成吃食物,吃到食物变长,得分增加,食物再次随机出现。直到蛇碰到边界或接触到自己的身体时,代表着游戏的结束。
首先导入pygame库和初始化并设置设置窗口大小以及标题

这时已经成功绘制出一个游戏窗口,接下来就要完成对游戏的编写
首先绘制蛇
我们让蛇头的大小正好占据一个格子的大小,设置蛇头颜色为白色。
head_color = (0,0,0)
绘制网格的时候,也计算了每个格子的宽度和高度,我们将计算格子的宽度和高度的代码放到函数外面,这样绘制蛇的时候也可以用到。
网格的宽度和高度:
cell_width = width/COL
cell_height = height/ROW
绘制蛇的时候,我们需要记录蛇头所在格子的位置,即格子处在第几行第几列。我们新建一个类来存储蛇头所在的行列信息。
class Point:
row = 0
col = 0
def init(self,row,col):
self.row = row
self.col = col
实例化一个蛇头对象
head = Point(row = ROW/2,col = COL/2)
第二步实现了对蛇头的绘制与蛇头的移动



第三步绘制食物,并计算得分
生成食物的颜色
food_color = (255,0,0)

记录随机生成食物的位置(行列):
pos = Point(row = random.randint(0,ROW-1),col = random.randint(0,COL-1))
判断是否和蛇头碰撞:
是否撞到标志布尔值
is_coll = False
是否跟蛇碰上了
if head.row == pos.row and head.col == pos.col:
is_coll = True
定义一个函数来处理生成食物及判断是否和蛇碰上的代码:
生成食物
def create_food():
while True:
pos = Point(row = random.randint(0,ROW-1),col = random.randint(0,COL-1))
是否撞到标志布尔值
is_coll = False
是否跟蛇碰上了
if head.row == pos.row and head.col == pos.col:
is_coll = True

    if not is_coll:
        break
return pos

food = create_food()
调用draw_rect()方法,在屏幕上绘制食物:

draw_rect(food,food_color)

吃到食物:
如果蛇头所在行和列等于食物所在的行和列的时候,就是吃到食物了,食物消失,得分增加1分。

吃东西
eat = (head.row == food.row and head.col == food.col)

if eat:
    food  = create_food()
    point += 1

显示得分:
设置显示文字的字体和大小
显示文字
font = pygame.font.SysFont("simhei",24)
设置显示的位置及绘制在屏幕上
显示得分
score_text = "得分:" + str(point)
score = font.render(score_text,True,(0,0,0))
score_rect = score.get_rect()
score_rect.centerx = screen.get_rect().centerx
score_rect.y = 10
screen.blit(score,score_rect)
记录原来蛇头的位置:
在Point类中增加一个copy()方法,返回的是蛇头原来的位置。
def copy(self):
return Point(row = self.row,col = self.col)
修改create_food()方法避免食物出现在蛇身体上
需要判断蛇身体的每一段的行和列是否和食物的行和列相同,如果相同,则代表相撞了,需要重新生成食物。
蛇的身子是否碰到食物
for snake in snakes:
if snake.row == pos.row and snake.col == pos.col:
is_coll = True
break
这样一个贪吃蛇就完成了

代码链接:
https://gitee.com/python_programming/jinyifei20192309

  1. 实验过程中遇到的问题和解决过程
    问题一:如何移动蛇?
    解决方案:查找资料发现可以利用蛇方向的改变,通过增加行,列数来进行蛇的移动
    问题二:如何对蛇的身体加长
    解决方案:使用copy()方法对蛇头的位置进行复制,处理蛇的身体,将蛇的头的位置插入到蛇身体列表的第0位。如果蛇没有吃到食物,蛇的身体就不要增加,那么列表中原来的末尾位置就需要移除。如果蛇吃到了食物,本身蛇的身体就需要增加,所以就不要移除末尾的位置。顺便说一句CSDN永远滴神!
  2. 感悟与思考
    通过对贪吃蛇游戏的编程,发现即使一个小小的游戏里面所蕴含的编程的知识是巨大的,且发现游戏虽小,但你要考虑到的情况却一点也不能少,需要你静下心来认真分析情况,对各个情况进行测验。通过编程,感觉到锻炼了自己的逻辑思维,让自己更加严谨了。
    ---CSDN
    ---《Python编程:从入门到实践》
posted @ 2020-06-11 23:24  哈蛤蛤哈  阅读(228)  评论(0编辑  收藏  举报