20203121 实验四《Python程序设计》实验报告

20203121 实验四《Python程序设计》实验报告

 

实验四

课程:《Python程序设计》
班级: 2031
姓名: 尹宗颐
学号: 20203121
实验教师:王志强
实验日期:2021年6月29日
必修/选修: 公选课


#1.实验内容

  • Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。

    我做的是游戏 普普通通的 贪吃蛇


## 2. 实验过程及结果

 

1.

 此前已经安装过一遍,忘记截图,此时显示已经安装过

 

 

 

 2.

  导入函数,检测版本,确定导入成功

 

 

 3.

  进行初始化设置

 

 

 4.

开始游戏,编写标题,得分,设置背景颜色和网格,设置帧率fps并利用fps控制蛇的移速,然后随机位置刷新食物

 

利用collidepoint进行碰撞检测,模拟出吃掉食物的效果,并增加分数和蛇的速度

 

 

 

 

设置蛇的移动方向

 

 

 

从键盘获取输入,控制蛇进行移动,并且限制不能向后移动,防止因此直接死亡

 

 

 

5.

失败条件判定:撞到自己

 

 

 

6.

失败后显示结算界面,但出现问题,结算界面未显示便直接结束程序,尚未解决

 码云:  https://gitee.com/besti2021python/yzy20203121/blob/master/game.py

 

 

 代码:

import pygame
import random
import copy



#初始方向
move_up = False
move_down = False
move_left = False
move_right = True



#初始化
pygame.init()
clock = pygame.time.Clock() #设置游戏时钟
screen = pygame.display.set_mode((800, 600)) #窗口大小
snake_list =[[10, 10]]#蛇的初始位置
food_point = [random.randint(10, 490),random.randint(10, 490)]#食物位置

#字体设置
font1 = pygame.font.SysFont('宋体', 16, True)
font_list = pygame.font.get_fonts()
game_font = pygame.font.SysFont('宋体', 16, True)
game_font1 = pygame.font.SysFont('宋体', 36, True)

#参数设置
num = -1
score = 0
a=10
b=0
c=move_left

#开始游戏
run = True
while run:
pygame.display.update()
pygame.display.set_caption("贪吃蛇 当前得分:%d " % score ) #编写标题与得分
clock.tick(a)#设置游戏fps,并利用fps控制蛇的速度
screen.fill([255, 255, 255])#
#绘制背景网格
for x in range(0,801,10):
pygame.draw.line(screen,(195,197,199),(x,0),(x,800),1)
pygame.draw.line(screen, (195, 197, 199), (0, x), (800, x), 1)
if b ==0:
food_rect = pygame.draw.circle(screen, [255, 0, 0], food_point, 10, 0)#显示食物
if b ==1:
food_rect = pygame.draw.circle(screen,[0,255,255],food_point,20,0)#显示食物

snake_rect = []
for pos in snake_list:

snake_rect.append(pygame.draw.circle(screen,[255,0,0],pos,5,0))

#吃掉食物
if food_rect.collidepoint(pos):
snake_list.append(food_point)
if num % 5 ==4 :
food_point = [random.randint(10, 790), random.randint(10, 590)]# 重新生成食物位置
food_rect = pygame.draw.circle(screen, [0 , 255, 255], food_point, 20, 0)# 显示食物
score += 1
num += 1
a += 2
b = 1
break
if num % 5 == 0:
score += 5
food_point = [random.randint(10,790),random.randint(10,590)]# 重新生成食物位置
food_rect = pygame.draw.circle(screen, [255, 0, 0], food_point, 10,0) # 显示食物
num +=1
a += 2
b = 0
break
else:
food_point = [random.randint(10, 790), random.randint(10, 590)]# 重新生食物位置
food_rect = pygame.draw.circle(screen, [255, 0, 0], food_point, 10, 0)# 显示食物
score += 1
num +=1
a += 2
b = 0
break
# 移动
pos = len(snake_list) - 1
while pos > 0:
snake_list[pos] = copy.deepcopy(snake_list[pos - 1])
pos -= 1
if move_right:
snake_list[pos][0] += 10
if snake_list[pos][0] > 800:
snake_list[pos][0] = 0
if move_left:
snake_list[pos][0] -= 10
if snake_list[pos][0] < 0:
snake_list[pos][0] = 800
if move_up:
snake_list[pos][1] -= 10
if snake_list[pos][1] < 0:
snake_list[pos][1] = 600
if move_down:
snake_list[pos][1] += 10
if snake_list[pos][1] > 600:
snake_list[pos][1] = 0


#位置移动
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP and event.key!=c:
move_up = True
move_down = False
move_left = False
move_right = False
print('上')
c = pygame.K_DOWN
if event.key == pygame.K_RIGHT and event.key!=c:
move_up = False
move_down = False
move_left = False
move_right = True
print('右')
c = pygame.K_LEFT
if event.key == pygame.K_LEFT and event.key!=c:
move_up = False
move_down = False
move_left = True
move_right = False
print('左')
c = pygame.K_RIGHT
if event.key == pygame.K_DOWN and event.key!=c:
move_up = False
move_down = True
move_left = False
move_right = False
print('下')
c = pygame.K_UP

# 如果吃掉自己
head_rect = snake_rect[0]
count = len(snake_rect)
while count > 1:
if head_rect.colliderect(snake_rect[count - 1]):
run = False
count -= 1
while run == -1:
screen.fill([0,0,0])
screen.blit(game_font1.render(u'Game Over' % score, True, [255, 255, 255]), [200, 200])
screen.blit(game_font1.render(u'您的得分:%d' % score, True, [255, 255, 255]), [400, 400]) #显示结算界面
#结算界面暂时出现问题,尚未解决
pygame.display.update()#刷新显示内容


#结束·

 


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

-问题1:用pip安装python失败,显示pip不是内部和外部指令

- 问题1解决方案:在python/script/中找到pip,修改指令的路径

 

 

- 问题2:蛇每次碰到食物就会报错
- 问题2解决方案:每次碰到食物后刷新食物位置,蛇长度+1

-问题3:无法显示结算界面
-问题3解决方案:询问同学,暂未解决

 


## 其他(感悟、思考等)

       一学期的python课程已经结束,我对python也有了大概的认识,但这只是一些皮毛,需要学习的知识还有很多。python的学习只能说是 “ 师傅领进门,修行靠个人。” 自学是非常重要的,但重要的还是要感

谢老师的引领。

       回顾这学期学到的知识,元组,集合,列表,字典,封装,继承,多态,爬虫等等,不同于c语言,python真的很神奇,它非常灵活而简洁,如果能够学好python,对于以后的生活与工作一定有很大的帮助。

       这次实验中,我第一次用编程的方式做出了一个游戏,虽然只是贪吃蛇这种小游戏,而且参考了许多资料,但我也学到了很多新的东西,如何使用pygame,collide函数,创建窗口,绘制图形,让图形动起

来等等,看见自己屏幕上的蛇动起来,逐渐变长,我内心的喜悦是无法描述的。虽然这次的程序还是有些瑕疵,但希望以后能够通过学习,做出更有意思的游戏或者其他小程序。

       最后,正如王老师第一节课讲的:“人生苦短,我用python”,希望python的学习能成为我人生记忆中精彩的一笔。

 

参考资料

  • https://www.bilibili.com/video/BV1Fb4y1o7Q7

  •  

    https://blog.csdn.net/hanhf/article/details/68921194

  • 云班课pygame相关内容
posted @ 2021-06-30 22:37  20203121尹宗颐  阅读(231)  评论(0编辑  收藏  举报