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

使用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,分享到这里也就结束啦。感兴趣的朋友可以去试试,又不会的可以来找我!

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

用Python制作小游戏相关推荐

  1. python能制作游戏吗_如何用Python制作小游戏

    要想用Python制作小游戏,必须要安装一个插件Pygame 什么是Pygame Pygame是跨平台Python模块,专为电子游戏设计,包含图像.声音.建立在SDL基础上,允许实时电子游戏研发而无需 ...

  2. python能做游戏吗-python制作小游戏(一)

    下载W3Cschool手机App,0基础随时随地学编程导语 这又将是一个不定期更新的系列~~~ 本系列主要将使用到python的pygame模块来教大家制作一些小游戏,每期制作一个.最后都会打包成.e ...

  3. 利用python制作小游戏

    利用python写"猜数字" "猜词语" "谁是卧底" 这三个游戏,从而快速掌握python编程的入门知识,包括python语法/列表/元组 ...

  4. python制作小游戏教程_12岁的少年教你用Python做小游戏

    你有没有想过电脑游戏是怎样制作出来的?其实它没有你想象的那样复杂! 在这个教程里,你要学做一个叫<兔子和獾>的塔防游戏,兔子作为英雄,需要在城堡里抵御獾的进攻. 为了写这个游戏的代码,你将 ...

  5. 【Python制作小游戏】一篇文章带你做出自己的“大鱼吃小鱼”

    时间比较仓猝,这个素材比较捡漏所以将就一下,关键看操作. 其次我今天大婚大家多多祝福我啊,,另外祝大家愚人节快乐,哈哈哈~ 这还是这几天外甥吵吵着想玩大鱼吃小鱼,作为一个合格的舅舅我必须出手了,虽然他 ...

  6. Python制作小游戏(一)

    目录 前言 第一步:激活模块 游戏初始化 初始化pygame, 设置展示窗口 加载必要的游戏素材 主函数 初始化 播放背景音乐 字体加载 定义兔子 跟踪玩家的精度变量, 记录了射出的箭头数和被击中的獾 ...

  7. 如何用python制作小游戏

    1.准备 开始之前,你要确保Python和pip已经成功安装在电脑上噢,如果没有,请访问这篇文章:超详细Python安装指南 进行安装. Windows环境下打开Cmd(开始-运行-CMD),苹果系统 ...

  8. 【python制作小游戏】大鼻子马里奥等你来挑战,还原度超高哦~

    一.前言 嗨喽,大家好呀!这里是魔王呐~ 在你的童年记忆里,是否有一个蹦跳.顶蘑菇的小人已经被遗忘? 马里奥是靠吃蘑菇成长,闻名世界的超级巨星.特征是大鼻子.头戴帽子.身穿背带工作服.还留着胡子. 帽 ...

  9. 【python制作小游戏】能用工具尽量别耗时间,速战速决,见识新的天空——开心消消乐

    穿过云朵升一级是要花6个金币的,有的时候金币真的很重要 前言 嗨喽,大家好呀!这里是魔王~ 一天晚上,天空中掉下一颗神奇的豌豆种子,正好落在了梦之森林的村长屋附近. 种子落地后吸收了池塘的水分,迅速成 ...

最新文章

  1. jdk1.4容器类关系图
  2. mysql 主从复制 有数据库_mysql 数据库一对一主从(master-slave)复制
  3. Python 大数据分析 淘宝商品销量的关系
  4. zabbixdocker里的mysql_基于Docker安装与部署Zabbix
  5. 十道解分式方程及答案_100道八年级分式方程及答案.
  6. .unl 文件 导入 mysql_mysql数据导出导入
  7. linux软件安装方法
  8. 前端电子时钟字体引入
  9. 浪曦 ASP.net AJAX系列 视频下载
  10. 计算机怎样使操作家长控制,孩子自制力差 电脑设置家长控制技巧图文详细教程...
  11. 2021芒部中学高考成绩查询,2021年镇雄县高考状元名单资料,今年镇雄县高考状元多少分...
  12. pytorch导出onnx格式模型时,不固定输入输出维度
  13. jQuery菜鸟学习实例
  14. 雨林木风诚聘Linux研发工程师
  15. C#通过TCP实现 HL7医疗系统传输的协议,并使用MLLP协议接收HL7消息并解析
  16. SQL CheatSheet Joins
  17. C++ Primer 第5版--练习9.14
  18. MySQL 慢查询日志介绍
  19. linux raid 找回文件,Linux下软RAID的实现与数据恢复
  20. 安卓平台下的GPS架构介绍及驱动移植记录

热门文章

  1. c语言求幸运数字程序,算法题挑选幸运数字,该如何处理
  2. python——通信原理,进程与线程
  3. Word文件怎么打印
  4. 程序员的时间管理计划
  5. 未来计算机发展的三大趋势,报告:5G未来发展会有三大趋势 中国有望成为全球最大的AI市场...
  6. 显示手机键盘的回车换行
  7. 软件测试工程师笔试题带答案(二)
  8. 百慕大永中科技来华创业蒙难记
  9. C++怎样获取当前系统时间?
  10. [WebGL入门]二十六,纹理绘图