IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python实现kisses小游戏 -> 正文阅读

[Python知识库]python实现kisses小游戏

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

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-01 14:27:47  更:2021-08-01 14:28:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/2 14:01:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码