Python游戏开发,Python实现贪吃蛇小游戏与吃豆豆 附带源码

如题所述

Python版本:3.6.4
相关模块:pygame模块;以及一些Python自带的模块。
安装Python并添加到环境变量,pip安装需要的相关模块即可。
贪吃蛇的游戏规则应该不需要我多做介绍了吧T_T。写个贪吃蛇游戏其实还是很简单的。首先,我们进行一下游戏初始化:
```python
import sys
import pygame
import random
# 游戏初始化
pygame.init()
```
然后定义一个贪吃蛇类:
```python
class Snake:
def __init__(self):
self.head_coord = (100, 50)
self.tail_coords = [(100, 60), (100, 40)]
self.body_length = 2
self.direction = "RIGHT"
def get_head_coord(self):
return self.head_coord
def get_tail_coords(self):
return self.tail_coords
def turn(self, point):
if self.direction == "RIGHT" and point == "LEFT":
self.direction = "LEFT"
if self.direction == "LEFT" and point == "RIGHT":
self.direction = "RIGHT"
if self.direction == "UP" and point == "DOWN":
self.direction = "DOWN"
if self.direction == "DOWN" and point == "UP":
self.direction = "UP"
def move(self):
if self.direction == "RIGHT":
self.head_coord = (self.head_coord[0] + 10, self.head_coord[1])
if self.direction == "LEFT":
self.head_coord = (self.head_coord[0] - 10, self.head_coord[1])
if self.direction == "UP":
self.head_coord = (self.head_coord[0], self.head_coord[1] - 10)
if self.direction == "DOWN":
self.head_coord = (self.head_coord[0], self.head_coord[1] + 10)
# 移动蛇尾
new_tail = self.tail_coords[-1]
del self.tail_coords[-1]
self.tail_coords.insert(0, new_tail)
# 更新蛇头位置
self.tail_coords.insert(0, self.head_coord)
```
用户通过键来控制贪吃蛇的行动:
```python
def change_direction(key_pressed, snake):
if key_pressed == pygame.K_RIGHT:
snake.turn("RIGHT")
if key_pressed == pygame.K_LEFT:
snake.turn("LEFT")
if key_pressed == pygame.K_UP:
snake.turn("UP")
if key_pressed == pygame.K_DOWN:
snake.turn("DOWN")
```
需要注意的是,贪吃蛇不能180度大拐弯,只能90度地拐弯。例如正在向左行动的贪吃蛇不能瞬间变成向右行动。
然后,我们需要随机生成一个食物,且需要保证该食物的位置不与贪吃蛇的位置相同:
```python
def create_food(snake):
food = (random.randrange(1, (WIDTH//10)) * 10, random.randrange(1, (HEIGHT//10)) * 10)
while food in snake.get_tail_coords():
food = (random.randrange(1, (WIDTH//10)) * 10, random.randrange(1, (HEIGHT//10)) * 10)
return food
```
在更新贪吃蛇的时候,如果它吃到了食物,则蛇身长加一,否则只是简单的按照给定的方向行动而不改变蛇身长度:
```python
def update_snake(snake, food):
if snake.get_head_coord() == food:
snake.body_length += 1
food = create_food(snake)
snake.move()
return food
```
同时,当贪吃蛇吃到食物时,需要重新生成一个新的食物:
```python
def reset_food(snake, food):
if snake.get_head_coord() == food:
food = create_food(snake)
return food
```
最后,当贪吃蛇碰到墙壁或者蛇头碰到蛇身时,游戏结束:
```python
def check_collision(snake):
# 检查是否撞墙
if snake.head_coord[0] >= WIDTH or snake.head_coord[0] 0 or snake.head_coord[1] >= HEIGHT or snake.head_coord[1] < 0:
return True
# 检查是否撞到蛇身
for block in snake.get_tail_coords():
if snake.head_coord == block:
return True
return False
```
并显示一下游戏结束界面:
```python
def game_over_display():
game_display.fill(BLACK)
message_display("Game Over", RED, 50, WIDTH/2, HEIGHT/2)
pygame.display.update()
pygame.time.delay(2000)
```
温馨提示:答案为网友推荐,仅供参考
相似回答