20214311江俊涵 实验四 Python综合实践

20212205 2021-2022-2 Python程序设计》实验四报告

课程:《Python程序设计》
班级: 2143
姓名: 江俊涵
学号:20214311
实验教师:王志强
实验日期:2022年5月29日
必修/选修: 公选课

1.实验内容

Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
注:在华为ECS服务器(OpenOuler系统)和物理机(Windows/Linux系统)上使用VIM、PDB、IDLE、Pycharm等工具编程实现。

2. 实验过程及结果

(一)使用python编写游戏虫子大战水果

(二)实验分析

1.
导入库
import pygame
import time
import random

2.
设置窗口大小
window_x = 720
window_y = 480

3.
定义颜色以便调用
black = pygame.Color(0, 0, 0)
white = pygame.Color(255, 255, 255)
red = pygame.Color(255, 0, 0)
green = pygame.Color(0, 255, 0)
blue = pygame.Color(0, 0, 255)
4.
初始化pygame(1*
pygame.init()

5.
初始化游戏窗口
pygame.display.set_caption('DKY虫子大战水果')
game_window = pygame.display.set_mode((window_x, window_y))
6.
FPS(每秒帧数)控制器(2*
fps = pygame.time.Clock()
7.
定义虫子默认位置
worm_position = [100, 50]

定义虫子速度

snake_speed = 15


定义虫子的前 4 个块
snake_body = [ [100, 50],
[90, 50],
[80, 50],
[70, 50]
]
水果位置
fruit_position = [random.randrange(1, (window_x//10)) * 10,
random.randrange(1, (window_y//10)) * 10]
fruit_spawn = True(3*

设置默认的虫子方向向右
direction = 'RIGHT'
change_to = direction(4*

8.
初始分数
score = 0


显示评分功能
def show_score(choice, color, font, size):
创建字体对象 score_font
score_font = pygame.font.SysFont(font, size)

创建显示表面对象 core_surface
score_surface = score_font.render('Score : ' + str(score), True, color)

为文本表面对象创建一个矩形对象
score_rect = score_surface.get_rect()

显示文字
game_window.blit(score_surface, score_rect)

9.
游戏结束功能
def game_over():
创建字体对象 my_font
my_font = pygame.font.SysFont('times new roman', 50)

创建将在其上绘制文本的文本表面
game_over_surface = my_font.render('Your Score is : ' + str(score), True, red)

为文本表面对象创建一个矩形对象
game_over_rect = game_over_surface.get_rect()

设置文本位置
game_over_rect.midtop = (window_x / 2, window_y / 4)

blit 将在屏幕上绘制文本
game_window.blit(game_over_surface, game_over_rect)
pygame.display.flip()

2 秒后我们将退出程序
time.sleep(2)

停用 pygame 库
pygame.quit()

退出程序
quit()
10.
游戏主函数,控制虫子的
# Main Function
while True:

# 处理关键事件
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
change_to = 'UP'
if event.key == pygame.K_DOWN:
change_to = 'DOWN'
if event.key == pygame.K_LEFT:
change_to = 'LEFT'
if event.key == pygame.K_RIGHT:
change_to = 'RIGHT'

# 如果同时按下两个键
# 我们不想让蛇同时向两个方向移动
if change_to == 'UP' and direction != 'DOWN':
direction = 'UP'
if change_to == 'DOWN' and direction != 'UP':
direction = 'DOWN'
if change_to == 'LEFT' and direction != 'RIGHT':
direction = 'LEFT'
if change_to == 'RIGHT' and direction != 'LEFT':
direction = 'RIGHT'

# 移动蛇
if direction == 'UP':
snake_position[1] -= 10
if direction == 'DOWN':
snake_position[1] += 10
if direction == 'LEFT':
snake_position[0] -= 10
if direction == 'RIGHT':
snake_position[0] += 10

# 蛇体生长机制
# 如果水果和蛇发生碰撞,那么分数将增加 10
snake_body.insert(0, list(snake_position))
if snake_position[0] == fruit_position[0] and snake_position[1] == fruit_position[1]:
score += 10
fruit_spawn = False
else:
snake_body.pop()

if not fruit_spawn:
fruit_position = [random.randrange(1, (window_x // 10)) * 10,
random.randrange(1, (window_y // 10)) * 10]

fruit_spawn = True
game_window.fill(black)

for pos in snake_body:
pygame.draw.rect(game_window, green, pygame.Rect(
pos[0], pos[1], 10, 10))

pygame.draw.rect(game_window, blue, pygame.Rect(
fruit_position[0], fruit_position[1], 10, 10))

# 游戏结束条件
if snake_position[0] < 0 or snake_position[0] > window_x - 10:
game_over()
if snake_position[1] < 0 or snake_position[1] > window_y - 10:
game_over()

# 触碰蛇身
for block in snake_body[1:]:
if snake_position[0] == block[0] and snake_position[1] == block[1]:
game_over()

# 连续显示分数
show_score(1, white, 'times new roman', 20)

# 刷新游戏画面
pygame.display.update()

# 每秒帧数/刷新率
fps.tick(snake_speed)

 
 


(三) 程序源代码及运行截图


 

 

 

 

3. 实验放至putty上运行

打开华为云服务器

在putty上登陆

使用WinSCP上传文件

使用putty运行程序

4. 课程小结

    大一下选修的python,让我第一次有了当一名程序员的感受,加上必修的C语言,计算机语言可以说是这个学期中最令我新奇同时又是最头大的一门学科了。和身边的编程大佬比起来,我像一个婴儿,没有任何的基础和天赋,虽然如此,上课的时候一直跟着老师敲代码(虽然有的时候并不明白代码的用处),王老师教会了很多有趣的python知识:给小弟弟小妹妹的出题软件,哈哈哈,还有王者荣耀的英雄分类,哈哈哈哈,将我们所学与兴趣很好的结合起来,上老师的课确实是一种新奇快乐的体验。下课写实验报告,做了许多有趣的实验,使用socket搭建对话,以及爬取网页等等。不知不觉python就结课了,想到看不见老师每节课都独具创意的签到手势,竟莫名感到一丝忧伤,希望以后有缘还能有跟着王老师学习的机会。感谢老师带我进入python的大门,带我认识到编程的强大,我对计算机也不再是当初一无所知的状态,人生苦短,我学python.未来的学习中我也一定会继续学习python这项技能,最后感谢王老师的指导,感谢您用这么有趣的方式为我打开学习python的大门。

参考资料

https://blog.csdn.net/weixin_39850365/article/details/110909644

putty运行python代码_通过PuTTY用于SSH的Python脚本

https://blog.csdn.net/adfass/article/details/116778535  pygame导入和初始化

posted @ 2022-05-29 15:52  JJH(ー`´ー)  阅读(63)  评论(0编辑  收藏  举报