用Python制作小游戏

谁还没有玩过俄罗斯方块呢,这款单机小游戏,简单易懂,最好打发无聊时间了。

使用python除了可以爬取图片,视频,当然可以制作一些小游戏了。

其实这个很简单,就是转化数据很麻烦 ☹

实际流程:

  • 新生成图形块,如果从下往上已经堆到这里了(图形块出现位置出现不为空白的背景)游戏结束
  • 下落(途中可以键盘操作块的移动,转动)
  • 到底,图形数据记录到map,检查是否消去一行

所有的检查,就用check_action(位置x,位置y,图形块号,图形转动角度):检查是否出界或遇到原先的块,

  • 游戏是否结束判断:新生成图形块位置是否check_action == False
  • 下落是否到底:y+1位置是否check_action == False
  • 操作动作(x-1,x+1,y+1,角度+1):是否check_action == False
import sys
import pygame
from pygame.locals import *
import randomclass Block:blk_color = [(255, 255, 255),(255, 255, 0),(255, 0, 255),(0, 255, 255),(255, 0, 0),(0, 255, 0),(0, 0, 255),(32,32,32)]BLANK = 7type_coord=[[[-1,0],[0,0],[1,0],[2,0]]\,[[-1,0],[0,0],[1,0],[0,1]]\,[[-1,0],[0,0],[-1,1],[0,1]]\,[[-1,0],[0,0],[0,1],[1,1]]\,[[0,0],[1,0],[-1,1],[0,1]]\,[[-1,0],[0,0],[1,0],[1,1]]\,[[-1,0],[0,0],[1,0],[-1,1]]]type_rotate = []def __init__(self,x,y,blk,angle):self.x = xself.y = yself.blk = blkself.angle = angle@staticmethoddef rotate(no):rt_all = []rt = Block.type_coord[no][:]cx,cy=0,0for b in range(4):rt[b][0],rt[b][1] = rt[b][0]*4,rt[b][1]*4cx += rt[b][0]cy += rt[b][1]cx = (cx)//8*2 if no !=6 else (cx+4)//8*2cy = (cy)//8*2 if no !=6 else (cy-4)//8*2rt_all.append(rt)for r in range(3):rt_new = []for b in range(4):rt_new.append([cx + (cy-rt[b][1]),cy-(cx-rt[b][0])])rt_all.append(rt_new)rt = rt_newfor r in range(4):for b in range(4):rt_all[r][b][0] //= 4rt_all[r][b][1] //= 4return rt_all@staticmethoddef init_rotate():for r in range(7):Block.type_rotate.append(Block.rotate(r))class TRS:screen = Nonemap = [[Block.BLANK]*10 for i in range(20)]STATUS = 0cbk = Nonedef __init__(self,screen):TRS.screen = screen@staticmethoddef action(key_pressed):if(key_pressed[K_LEFT] and TRS.check_action(TRS.cbk.x-1,TRS.cbk.y,TRS.cbk.blk,TRS.cbk.angle)):TRS.cbk.x -= 1elif (key_pressed[K_RIGHT] and TRS.check_action(TRS.cbk.x+1,TRS.cbk.y,TRS.cbk.blk,TRS.cbk.angle)):TRS.cbk.x += 1elif (key_pressed[K_UP] and TRS.check_action(TRS.cbk.x,TRS.cbk.y,TRS.cbk.blk,TRS.cbk.angle+1)):TRS.cbk.angle += 1elif (key_pressed[K_DOWN] and TRS.check_action(TRS.cbk.x,TRS.cbk.y+1,TRS.cbk.blk,TRS.cbk.angle)):TRS.cbk.y += 1@staticmethoddef new_blk():TRS.cbk = Block(5,0,random.randint(0,6),0)@staticmethoddef check_action(x,y,blk,angle):tr = Block.type_rotate[blk][angle%4]for b in range(4):bx,by = x + tr[b][0],y + tr[b][1]if(bx<0 or bx>9 or by <0 or by>19 or TRS.map[by][bx]!=Block.BLANK):return Falsereturn True@staticmethoddef check_drop():if TRS.check_action(TRS.cbk.x,TRS.cbk.y+1,TRS.cbk.blk,TRS.cbk.angle):TRS.cbk.y += 1else:TRS.STATUS = 2@staticmethoddef check_clear():blk = Block.type_rotate[TRS.cbk.blk][TRS.cbk.angle%4]row = list({TRS.cbk.y + blk[i][1] for i in range(4)})row.sort()row.reverse()for b in range(4):TRS.map[TRS.cbk.y + blk[b][1]][TRS.cbk.x + blk[b][0]] = TRS.cbk.blkdel_rows = 0for r in row:if not (Block.BLANK in TRS.map[r]):TRS.map.pop(r)del_rows += 1for d in range(del_rows):TRS.map.insert(0,[Block.BLANK for i in range(10)])@staticmethoddef print_game():TRS.screen.fill((0, 0, 0))for row in range(20):for col in range(10):pygame.draw.rect(TRS.screen, Block.blk_color[TRS.map[row][col]], ((col*21,row*21), (20, 20)), 0)blk = Block.type_rotate[TRS.cbk.blk][TRS.cbk.angle%4]for b in range(4):pygame.draw.rect(TRS.screen, Block.blk_color[TRS.cbk.blk], (((TRS.cbk.x+blk[b][0])*21,(TRS.cbk.y+blk[b][1])*21), (20, 20)), 0)
class App:def __init__(self):pygame.init()screen = pygame.display.set_mode((300,430))Block.init_rotate()TRS(screen)def main(self):clock = pygame.time.Clock()   # 创建游戏时钟count = 1# 进入游戏循环while True:# 设置刷新帧率clock.tick(15)# 事件检测for event in pygame.event.get():if event.type == pygame.QUIT:   # 退出事件sys.exit()if TRS.STATUS == 0:TRS.new_blk()if TRS.check_action(TRS.cbk.x,TRS.cbk.y,TRS.cbk.blk,TRS.cbk.angle):TRS.STATUS = 1else:TRS.STATUS = 3print("GAME OVER")elif TRS.STATUS == 1:TRS.action(pygame.key.get_pressed())if count % 10 == 0:TRS.check_drop()elif TRS.STATUS == 2:TRS.check_clear()TRS.STATUS = 0TRS.print_game()pygame.display.update()   #刷新屏幕count += 1App().main()

ok,分享到这里也就结束啦。感兴趣的朋友可以去试试,又不会的可以来找我!
在这里插入图片描述

希望你们能够喜欢,记得三连哦。我是小圆,我们下篇文章见啦 ~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/142958.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

用Python制作简单的小游戏

朋友们大家好&#xff0c;相信大部分人都喜欢玩游戏&#xff0c;无论是在工作间隙还是下班回家的路上&#xff0c;可能都会拿起手机玩游戏打发时间&#xff0c;亦或是在游戏中寻找乐趣&#xff0c;放松自己。上 我跟大家分享的内容主要是用Python的Pygame Zero模块来制作小游戏…

一日一技:用Python做游戏有多简单

自从表白代码发了以后&#xff0c;有很多同学问我除了这种表白的&#xff0c;还有其他什么小游戏吗&#xff0c;游戏是怎么做的&#xff0c;难不难。我就用两篇文章来介绍一下&#xff0c;如果使用Python做游戏。 兔子与灌 俄罗斯方块 休闲五子棋 走迷宫 推箱子 消消乐 超多小…

利用python制作自己的小游戏,超简教程

懒得客套&#xff0c;直接步入主题 首先&#xff0c;利用python来做游戏需要用到python中的pygame模块&#xff0c;这个我们在终端cmd中安装 输入&#xff1a;pip install pygame 安装好后我们进入pycharm查询我们有的模块&#xff08;打开路径&#xff1a;文件-设置&#xf…

用python制作几款简单又好玩的小游戏,找回童年的记忆

今天给大家带来几个Python小游戏&#xff0c;找回童年的同时学习编程&#xff01; 一、接金币 普通难度&#xff1a;❤ 玩法介绍&#xff1a;吃金币&#xff0c;控制左右键&#xff0c;有手就行。 源码分享 import os import cfg import sys import pygame import random…

30个Python小游戏,上班摸鱼我能玩一天【内附源码】

大家好&#xff0c;我是辣条。 今天给大家带来30个py小游戏&#xff0c;一定要收藏&#xff01; 目录 有手就行 1、吃金币 2、打乒乓 3、滑雪 4、并夕夕版飞机大战 5、打地鼠 简简单单 6、小恐龙 7、消消乐 8、俄罗斯方块 9、贪吃蛇 普普通通 10、24点小游戏 1…

python小游戏-移动木板

文章目录 一、游戏简介二、编写步骤1.引入库2.初始化3.相关自定义函数4.相关自定义函数 一、游戏简介 本游戏是通过python编写的小游戏&#xff0c;给初学者熟悉python编程语言抛砖引玉&#xff0c;希望有所帮助。 成型的效果图如下&#xff1a; 二、编写步骤 1.引入库 代码…

MySQL——子查询

来一篇 MySQL-子查询 记录一下这个美好的时光,学习记录篇,下文中所有SQL 语句 均可在 MySQL DB 学习Demo 此处下载SQL语句执行,有相关DB 与 表。 1. 需求分析与问题解决 1.1 实际问题 现有解决方式一: SELECT salary FROM employees WHERE last_name = Abel SELECT last…

谈谈linux网络编程中的应用层协议定制、Json序列化与反序列化那些事

linux【网络编程】之协议定制、序列化与反序列化 一、序列化与反序列化二、应用层协议如何定制三、网络通信中数据流动的本质四、网络版计算器编写4.1 业务流程4.2 核心代码 一、序列化与反序列化 由于socket api的接口&#xff0c;在读写数据的时候是以字符串的方式发送接收的…

python配置arcpy环境

在pycharm配置arcpy让其导入不出现没有arcpy这个模块我们会进行环境配置 。 第一步 第二步 第三步 第四部 然后找到你arcgis安装的位置 记住如果你重名了arcgis安装位置的名字一定要进入到arcpy安装目录中找一个文件 查看Arcgis安装目录下的 E:\ArcGIS\Python27\ArcGIS10.2\L…

Python配置CPLEX

大致的安装步骤如下 1.百度搜索CPLEX&#xff0c;进入官网&#xff0c;获取许可后&#xff0c;下载并安装&#xff08;要能找到自己的安装路径&#xff09; 2.安装完成后&#xff0c;可以直接用ide进行编程&#xff0c;但是&#xff0c;还可以用Python来调用CPLEX 3.给Pytho…

Python:环境变量配置方法 详细教程

最近有人问我如何配置python环境变量&#xff0c;这篇文章就向大家介绍python环境变量配置方法。 python环境变量的配置方法&#xff1a;首先鼠标右键此电脑&#xff0c;选择属性&#xff1b;然后点击高级系统设置&#xff0c;点击环境变量&#xff1b;接着点击path进行编辑&am…

vscode配置python路径_Vscode的python配置(macOS)

1. Vscode是一款开源的跨平台编辑器。默认情况下&#xff0c;vscode使用的语言为英文(en)&#xff0c;以下步骤改为中文 打开vscode工具&#xff0c;使用快捷键组合【CmdShiftp】&#xff0c;在搜索框中输入“configure display language”&#xff0c;点击确定后&#xff0c;…

python环境配置教程

一、下载和安装软件 进入python官网&#xff0c;下载所需的python版本 进入pycharm官网&#xff0c;下载社区版即可 两个软件安装&#xff0c;基本安装默认配置即可&#xff0c;选择环境变量时建议选一下&#xff08;或者后面自行添加&#xff09; 二、建立代码项目 本地建…

pycharm配置python环境

文章目录 安装pycharm安装pythonpycharm配置python,并激活pycharm界面运行一下取消更新 安装pycharm PyCharm 的下载地址&#xff1a;http://www.jetbrains.com/pycharm/download/#sectionwindows 版本分为community(社区版)和professional(专业版) 1.选择专业版安装 点击I…

MacOS配置Python环境

python简介 Python是用来编写应用程序的高级编程语言。 Python就为我们提供了非常完善的基础代码库&#xff0c;覆盖了网络、文件、GUI、数据库、文本等大量内容&#xff0c;被形象地称作“内置电池&#xff08;batteries included&#xff09;”。 用Python开发&#xff0c;许…

Sublime配置Python环境步骤

零、配置python3环境 打开 Tools > Build System > New Build System 输入以下内容 {//"shell_cmd": "make""cmd": ["D:/Python/python.exe","-u","$file"],"file_regex": "^[ ]*File \&…

python配置Anaconda3环境运行python

1.安装Anaconda3 链接&#xff1a;Anaconda | Anaconda Distribution 点击NXET 点击I Agree 选择第一个 自己更改存储位置 选择第二个 2.下载Pycharm 我目前使用的是2021.1专业版&#xff0c;下载去官网&#xff0c;安装也很简单&#xff0c;就不多说了。 配置 1、打开…

神器 VS Code,超详细Python配置使用指南

作者&#xff1a;Lemon 出品&#xff1a;Python数据之道 神器 VS Code&#xff0c; 超详细Python配置使用指南 大家好&#xff0c;我是 Lemon。 之前在公众号发了关于 PyCharm 与 VS Code 对比的文章&#xff0c;大家也是很有感慨。 鉴于 PyCharm 是收费的工具&#xff0c;不少…

Python配置镜像源的三种方法

1.常用镜像源 先分享一些比较好的镜像源&#xff1a; 清华&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple 阿里云&#xff1a;http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 华中理工大学&#xff1a;http://pypi.…

Mac下终端 pip及 Python 配置

文章目录 1、Mac两个bin目录2、Mac的终端的用户可配置文件3、查看位置命令实例 4、Python 相关配置5、删除/usr/local/bin 目录下指向的Python3.7 的连接&#xff1a;6、将Python3设置为系统默认Python Python 三方库地址&#xff1a;https://pypi.org 1、Mac两个bin目录 相同点…