python实现kisses小游戏

kisses小游戏

大家应该没有人没有玩过贪吃蛇小游戏吧,今天在初学Python的时候,利用现有的贪吃蛇代码进行修改,变成了情侣间的kisses小游戏。其实在写的时候脑子里一直都在唱”你追我如果你追到我,我就…….”

这段游戏并不是对游戏设计进行讨论学习,而是加了这些部分,进入界面、蛇头替换成照片,以及得分记录。

另外,还要感谢一下贪吃蛇的原作者,因为时间有些长了,找不到原来出处,如果有任何冒犯,请及时联系我,必将第一时间删除。

目录

kisses小游戏

前言

一、kisses是什么

二、实现步骤

1.加入开始界面

2.插入头像

3.显示得分

三、总结

四、完整代码

1.修改完成游戏代码

2.原游戏代码段

​​​​​​

前言

如果初学者感兴趣,可以类似做着学习,给女朋友一个小惊喜吧。

一、kisses是什么

类比于贪吃蛇来讲,女朋友(下文简称可可)是一条漂亮苗条的蛇,我呢就是一个香甜可口的果子等着他来吃,我站在原地,等可可追到我的时候,蛇就吃到了果子,而可可就emmm,kisses+1.

python实现kisses小游戏

; 二、实现步骤

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()

虽然看着还是很简陋,但是比一开始就进行游戏有好多了。

python实现kisses小游戏

图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

三、总结

游戏效果如下:

python实现kisses小游戏

图2 游戏效果

python实现kisses小游戏

图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()

Original: https://blog.csdn.net/qq_45710225/article/details/119249849
Author: 1011 0011
Title: python实现kisses小游戏

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/783219/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球