kisses小游戏
????????大家应该没有人没有玩过贪吃蛇小游戏吧,今天在初学Python的时候,利用现有的贪吃蛇代码进行修改,变成了情侣间的kisses小游戏。其实在写的时候脑子里一直都在唱“你追我如果你追到我,我就.......”
? ? ? ? 这段游戏并不是对游戏设计进行讨论学习,而是加了这些部分,进入界面、蛇头替换成照片,以及得分记录。
????????另外,还要感谢一下贪吃蛇的原作者,因为时间有些长了,找不到原来出处,如果有任何冒犯,请及时联系我,必将第一时间删除。
目录
kisses小游戏
前言
一、kisses是什么
二、实现步骤
1.加入开始界面
2.插入头像
3.显示得分
三、总结
四、完整代码
1.修改完成游戏代码
2.原游戏代码段
??????
前言
????????如果初学者感兴趣,可以类似做着学习,给女朋友一个小惊喜吧。
一、kisses是什么
? ? ? ? 类比于贪吃蛇来讲,女朋友(下文简称可可)是一条漂亮苗条的蛇,我呢就是一个香甜可口的果子等着他来吃,我站在原地,等可可追到我的时候,蛇就吃到了果子,而可可就emmm,kisses+1.
?
二、实现步骤
1.加入开始界面
? ? ? ? 由于刚学习了tkinter,于是就直接引入tkinter的库制作了下面一个很简单的进入界面。
def app():
root.title("snake")
root.geometry("300x200+600+250")
l1 = tk.Label(root, text="kisses", font=("微软雅黑", 30), fg="black")
l1.pack(ipadx=100, ipady=50, anchor="center")
button1 = tk.Button(root, text="start", bg="orange", width=6, height=10, font=("微软雅黑", 16), command=start)
button1.pack(ipadx=10, ipady=8, anchor="center")
root.mainloop()
????????虽然看着还是很简陋,但是比一开始就进行游戏有好多了。
?
图1 进入界面
? ? ? ? 点击start进入start模块,代码如下:?
def start():
root.destroy()
snake = Snake()
snake.initialize()
? ? ? ? ?root.destroy保证单机开始按钮之后,开始界面消失。接下来就是游戏部分了
2.插入头像
????????在网上学习的方法中,还有设置界面等,由于游戏本身就有,所以我的代码就不重复设置了。方法可以自行搜索python显示加载图片的方法。比如:pygame显示图片的方法_pygame系列教程——1.2加载及显示图片(转载自凉快一点点)
snake_img = pygame.image.load("F:\\code\\python\\photo\\111.jpg").convert()
fruit_img = pygame.image.load("F:\\code\\python\\photo\\222.jpg").convert()
for position in snakebody:
pygame.draw.rect(playSurface, self.white, Rect(position[0], position[1], 20, 20)) # 蛇的身体
playSurface.blit(fruit_img, (targetPosition[0], targetPosition[1]))
playSurface.blit(snake_img, (snakePosition[0], snakePosition[1]))
pygame.display.flip()
3.显示得分
? ? ? ? 首先,在判断蛇吃掉果实这里加入得分记数
# 判断蛇是否吃掉了果实
snakebody.insert(0, list(snakePosition))
if snakePosition[0] == targetPosition[0] and snakePosition[1] == targetPosition[1]:
targetflag = 0
score += 1
????????然后,这里设置显示的字体大小位置等,具体方法可以参考pygame游戏开发系列3-显示文字(转载自 酒坛坛儿^_^)
font = pygame.font.SysFont('times', 20)
text = font.render('kisses:%d'%score, True, (0, 0, 0), (255, 255, 255))
playSurface.blit(text, (300, 0))
pygame.display.flip()
? ? ? ? 还有一步,在初始化的模块里设置score=0
三、总结
? ? ? ? 游戏效果如下:
图2 游戏效果
图3?原游戏效果
四、完整代码
1.修改完成游戏代码
import random
import sys
import tkinter as tk
import pygame
from pygame import *
"""pyinstaller -F -w snake.py"""
def start():
root.destroy()
snake = Snake()
snake.initialize()
class Snake:
# 制作背景和蛇、果实的的颜色, 0-255, 0,0,0,是代表黑色, 255,255,255代表白色
def __init__(self):
self.black = pygame.Color(0, 0, 0)
self.red = pygame.Color(255, 0, 0)
self.white = pygame.Color(255, 255, 255)
def gameover(self):
pygame.quit()
sys.exit()
def initialize(self):
pre=80
pygame.init()
# 定义蛇运动的速度
clock = pygame.time.Clock()
# 定义一个游戏界面
playSurface = pygame.display.set_mode((800, 600))
# 设置界面名字
pygame.display.set_caption('python贪吃蛇小游戏')
# 初始化变量
snakePosition = [80, 80] # 贪吃蛇起始位置,前面的参数数水平方向的距离,后面的参数是垂直方向的距离
# 贪吃蛇的长度,设定为方块的三百,每个方块的长度为25
snakebody = [[80, 80], [60, 80], [20, 80]]
targetPosition = [200, 400] # 方块的初始位置
targetflag = 1 # 定义一个标记,目的用来判断果实是否被吃掉
direction = 'right' # 初始化运动方向
changeDirection = direction # 改变方向变量
score=0
self.main(score, snakebody, targetPosition, targetflag, direction, changeDirection, snakePosition, playSurface, clock)
def main(self, score, snakebody, targetPosition, targetflag, direction, changeDirection, snakePosition, playSurface,
clock):
while True:
# 用循环来获得pygame中的所有事件
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
# 创建一个键盘的事件
elif event.type == KEYDOWN:
# 判断键盘的方向
if event.key == K_RIGHT:
changeDirection = 'right'
print('向右')
if event.key == K_LEFT:
changeDirection = 'left'
print("向左")
if event.key == K_DOWN:
print('向下')
changeDirection = 'down'
if event.key == K_UP:
print('向上')
changeDirection = 'up'
# 判断是否按下了esc键
if event.key == K_ESCAPE:
pygame.event.post(pygame.event.Event(QUIT))
# 判断蛇的方向
if changeDirection == 'left' and not direction == 'right':
direction = changeDirection
if changeDirection == 'right' and not direction == 'left':
direction = changeDirection
if changeDirection == 'down' and not direction == 'up':
direction = changeDirection
if changeDirection == 'up' and not direction == 'down':
direction = changeDirection
# 根据方向移动蛇头位置
if direction == 'right':
snakePosition[0] += 20
if direction == 'left':
snakePosition[0] -= 20
if direction == 'up':
snakePosition[1] -= 20
if direction == 'down':
snakePosition[1] += 20
# 增加蛇的长度
# 判断蛇是否吃掉了果实
snakebody.insert(0, list(snakePosition))
if snakePosition[0] == targetPosition[0] and snakePosition[1] == targetPosition[1]:
targetflag = 0
score += 1
else:
snakebody.pop()
# 随机再生成一个新的方块
if targetflag == 0:
x = random.randrange(1, 40) # 水平方向
y = random.randrange(1, 30) # 垂直方向
targetPosition = [int(x * 20), int(y * 20)]
targetflag = 1
# 绘制显示图
playSurface.fill("orange") # 背景
font = pygame.font.SysFont('times', 20)
text = font.render('kisses:%d'%score, True, (0, 0, 0), (255, 255, 255))
playSurface.blit(text, (300, 0))
pygame.display.flip()
snake_img = pygame.image.load("F:\\code\\python\\photo\\111.jpg").convert()
fruit_img = pygame.image.load("F:\\code\\python\\photo\\222.jpg").convert()
for position in snakebody:
pygame.draw.rect(playSurface, self.white, Rect(position[0], position[1], 20, 20)) # 蛇的身体
playSurface.blit(fruit_img, (targetPosition[0], targetPosition[1]))
playSurface.blit(snake_img, (snakePosition[0], snakePosition[1]))
#pygame.draw.rect(playSurface, self.red, Rect(snakePosition[0], snakePosition[1], 20, 20)) # 蛇的身体
#pygame.draw.rect(playSurface, self.red, Rect(targetPosition[0], targetPosition[1], 20, 20)) # 果实
pygame.display.flip()
# 游戏结束
pygame.display.flip()
if snakePosition[0] > 900 or snakePosition[0] < 0:
Snake().gameover()
elif snakePosition[1] > 800 or snakePosition[1] < 0:
Snake().gameover()
for i in snakebody[1:]:
if snakePosition[0] == i[0] and snakePosition[1] == i[1]:
Snake().gameover()
# 控制游戏速度,值越大速度越快
clock.tick(5)
def app():
root.title("snake")
root.geometry("300x200+600+250")
l1 = tk.Label(root, text="kisses", font=("微软雅黑", 30), fg="black")
l1.pack(ipadx=100, ipady=50, anchor="center")
button1 = tk.Button(root, text="start", bg="orange", width=6, height=10, font=("微软雅黑", 16), command=start)
button1.pack(ipadx=10, ipady=8, anchor="center")
root.mainloop()
if __name__ == '__main__':
size=10
root = tk.Tk()
app()
2.原游戏代码段
import pygame
import sys
import random
from pygame.locals import *
class Snake(object):
# 制作背景和蛇、果实的的颜色, 0-255, 0,0,0,是代表黑色, 255,255,255代表白色
def __init__(self):
self.black = pygame.Color(0, 0, 0)
self.red = pygame.Color(255, 0, 0)
self.white = pygame.Color(255, 255, 255)
def gameover(self):
pygame.quit()
sys.exit()
def initialize(self):
pygame.init()
# 定义蛇运动的速度
clock = pygame.time.Clock()
# 定义一个游戏界面
playSurface = pygame.display.set_mode((800, 600))
# 设置界面名字
pygame.display.set_caption('python贪吃蛇小游戏')
# 初始化变量
snakePosition = [80, 80] # 贪吃蛇起始位置,前面的参数数水平方向的距离,后面的参数是垂直方向的距离
# 贪吃蛇的长度,设定为方块的三百,每个方块的长度为25
snakebody = [[80, 80], [60, 80], [40, 80]]
targetPosition = [200, 400] # 方块的初始位置
targetflag = 1 # 定义一个标记,目的用来判断果实是否被吃掉
direction = 'right' # 初始化运动方向
changeDirection = direction # 改变方向变量
self.main(snakebody, targetPosition, targetflag, direction, changeDirection, snakePosition, playSurface, clock)
def main(self, snakebody, targetPosition, targetflag, direction, changeDirection, snakePosition, playSurface, clock):
while True:
# 用循环来获得pygame中的所有事件
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
# 创建一个键盘的事件
elif event.type == KEYDOWN:
# 判断键盘的方向
if event.key == K_RIGHT:
changeDirection = 'right'
print('向右')
if event.key == K_LEFT:
changeDirection = 'left'
print("向左")
if event.key == K_DOWN:
print('向下')
changeDirection = 'down'
if event.key == K_UP:
print('向上')
changeDirection = 'up'
# 判断是否按下了esc键
if event.key == K_ESCAPE:
pygame.event.post(pygame.event.Event(QUIT))
# 判断蛇的方向
if changeDirection == 'left' and not direction == 'right':
direction = changeDirection
if changeDirection == 'right' and not direction == 'left':
direction = changeDirection
if changeDirection == 'down' and not direction == 'up':
direction = changeDirection
if changeDirection == 'up' and not direction == 'down':
direction = changeDirection
# 根据方向移动蛇头位置
if direction == 'right':
snakePosition[0] += 20
if direction == 'left':
snakePosition[0] -= 20
if direction == 'up':
snakePosition[1] -= 20
if direction == 'down':
snakePosition[1] += 20
# 增加蛇的长度
# 判断蛇是否吃掉了果实
snakebody.insert(0, list(snakePosition))
if snakePosition[0] == targetPosition[0] and snakePosition[1] == targetPosition[1]:
targetflag = 0
else:
snakebody.pop()
# 随机再生成一个新的方块
if targetflag == 0:
x = random.randrange(1, 40) # 水平方向
y = random.randrange(1, 30) # 垂直方向
targetPosition = [int(x * 20), int(y * 20)]
targetflag = 1
# 绘制显示图
playSurface.fill(self.black) # 背景
for position in snakebody:
pygame.draw.rect(playSurface, self.white, Rect(position[0], position[1], 20, 20)) # 蛇的身体
pygame.draw.rect(playSurface, self.red, Rect(targetPosition[0], targetPosition[1], 20, 20)) # 果实
# 游戏结束
pygame.display.flip()
if snakePosition[0] > 900 or snakePosition[0] < 0:
snake.gameover()
elif snakePosition[1] > 800 or snakePosition[1] < 0:
snake.gameover()
for i in snakebody[1:]:
if snakePosition[0] == i[0] and snakePosition[1] == i[1]:
snake.gameover()
# 控制游戏速度,值越大速度越快
clock.tick(5)
snake = Snake()
snake.initialize()
|