文章目录

  • 前言
  • 蛇棋
    • 1. 玩法简介
    • 2. 实现棋子移动

前言

惭愧啊,三个月没更新下篇,问哥想起了西岳奇童。。。按你胃,最近确实忙得不可开交,忙着忙着,就忘记了在CSDN上继续游戏梦想了。另一方面,好像这个游戏比较冷门,所以阅读量也比较低,而热门的游戏也有比较成熟的代码,问哥又不想去复制粘贴。不管怎么样,烂尾总是不对,对不起大家!

其实这个游戏在上篇已经介绍的差不多了,唯一的“悬念”是如何实现棋子的动作。其实细究起来,倒也不算悬念。所谓的动作,就是连续的画面展示,在之前介绍的骰子、计时器里都有介绍过。而棋子的运动也较为类似。

上篇 —— 游戏界面搭建与基本逻辑
下篇 —— 移动棋子的动画实现与算法


蛇棋

1. 玩法简介

游戏截图:

2. 实现棋子移动

在上篇里,我们引入了棋子的自定义“类”(Piece),这样把棋子定义为有“方法”的类的实例,就像有生命一样。

class Piece:def __init__(self,name,cv,co,bg):self.name = nameself.cv = cvself.id = cv.create_image(co,image = bg)self.pos = 0def choose_piece(img):global playersP1 = Piece("Player", cv, (30,650),player_img[img])P2 = Piece("電腦", cv, (50,655),player_img[1-img])players=[P1,P2]

那么包括移动在内的棋子的方法,自然也应该定义在棋子这个类里。在我看来,棋子这个类应该包括至少两个方法:移动和判断。而前者就可以继续分为两个方法:横向跳跃和纵向跨域。判断就是指棋子移动到新的地点后,根据该地点的状况(梯子还是蛇头)来决定是否执行进一步的移动(升级或是后退)。

下面把完整的类定义内容贴出来:

class Piece:def __init__(self,name,cv,co,bg):self.name = nameself.cv = cvself.id = cv.create_image(co,image = bg)self.pos = 0def jump(self,n,acc=-10,reverse=1):if self.pos==100:reverse = -1self.d = -reverse if (self.pos//10)%2 or self.pos==100 else reverseif 0<self.pos<100 and self.pos%10==0:self.d *= -1self.shift(self.pos+1)if n>1:self.cv.after(50,lambda :self.jump(n-1))else: self.judge()else:self.cv.move(self.id,5.8*self.d,acc)if acc <10:self.cv.after(50,lambda :self.jump(n,acc+2,reverse))else:self.pos = self.pos+1 if reverse>0 else self.pos-1if n>1:self.cv.after(50,lambda :self.jump(n-1,-10,reverse))else: self.judge()       def shift(self,tar):self.d = -1 if (self.pos//10)%2 else 1dist_level = (tar-1)//10-(self.pos-1)//10if dist_level == 0:# self.jump(abs(tar-self.pos),-10,-1)dist_x = ((tar-1)%10-(self.pos-1)%10)*63.8for i in range(int(abs(dist_x))):self.cv.move(self.id,1,0)time.sleep(0.005)self.cv.update()self.pos = tarelse:if dist_level%2:dist_x = (11-(tar-1)%10-(self.pos-1)%10-2)*63.8else:dist_x = ((tar-1)%10-(self.pos-1)%10)*63.8dist_y = dist_level*63angle = dist_x/abs(dist_y)d=1 if dist_y<0 else -1for i in range(abs(dist_y)):self.cv.move(self.id,angle*self.d,d)time.sleep(0.005)self.cv.update()self.pos = tardef judge(self):if self.pos in LADDER.keys():info_update(f'{self.name} 运气真好,遇到梯子!')info_update(f'{self.name} 前进到 {LADDER[self.pos]} ^O^')tar = LADDER[self.pos]self.shift(tar)if self.pos==100: win_next(self.name)returnelif self.pos in SNAKE.keys():info_update(f'{self.name} 遭遇蛇吻!')info_update(f'{self.name} 退回到 {SNAKE[self.pos]} T_T')tar = SNAKE[self.pos]self.shift(tar)elif self.pos==100:win_next(self.name)returnelse:info_update(f"{self.name} 移动到 {self.pos}")players.reverse()if players[0].name=='電腦':info_update("電腦 开始掷骰子")roll(0)else:info_update("等待玩家掷骰子")btn['state']=NORMAL

而同样的,我们希望棋子在转动骰子后,根据骰子的点数自动开始移动,就需要把骰子运动的函数与棋子的移动方法链接起来:

def move(step):info_update(f"{players[0].name} 掷出了 {step} 点")players[0].jump(step)def roll(i):btn['state']=DISABLEDif i<13:cv.itemconfig(image1,image=dice_rotate[i])root.after(50,lambda :roll(i+1))else:res = random.randint(0,5)cv.itemconfig(image1,image=dice[res])move(res+1)

这样一样,我们只要点击“掷骰子”的按钮,转出数字,棋子就会自动开始移动了。

匆忙贴出了代码,大家如果感兴趣,可以自行尝试,下次问哥不再轻易尝试这么冷门的游戏了。

Python写个小游戏:蛇棋(下)相关推荐

  1. python写游戏脚本-使用Python写一个小游戏

    引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下 ...

  2. python编程小游戏-使用Python写一个小游戏

    引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下 ...

  3. 使用python制作聊天框解谜游戏_使用Python写一个小游戏alien invasion!

    最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下其中的 ...

  4. 手机版python3h如何自制游戏_教你如何用 Python 写一个小游戏

    教你如何用 Python 写一个小游戏 引言 最近 python 语言大火, 除了在科学计算领域 python 有用武之地之外, 在游戏后台等方面, python 也大放异彩, 本篇博文将按照正规的项 ...

  5. 关于python小游戏的毕业论文_使用Python写一个小游戏

    引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下 ...

  6. 用python做一个简单的游戏,用python写一个小游戏

    大家好,本文将围绕如何用python做一个简单的小游戏展开说明,python编写的入门简单小游戏是一个很多人都想弄明白的事情,想搞清楚用python做一个简单的游戏需要先了解以下几个事情. 1.Pyt ...

  7. python能制作游戏吗_如何用python写一个小游戏

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 引言最近python语言大火,除了在科学计算领域python有用武之地之外,在游 ...

  8. Python写个小游戏:蛇棋(上)

    文章目录 前言 蛇棋 1. 玩法简介 2. 游戏流程 3. 搭建游戏界面 1). 绘制棋盘 2). 放置信息框 3). 掷骰子的动画 4. 子窗口 1). 游戏开始函数 2). 棋子初始化函数 3). ...

  9. Python写个小游戏:速算24点(下)

    文章目录 前言 速算24点 1. 玩法简介 2. 游戏流程 3. 剩下的部分 1). 关卡 / 分数信息 IntVar类 2). 提示按钮 图片 按钮 3). 重新发牌 4. 让电脑计算24点 1). ...

最新文章

  1. python全栈慕课网靠谱么_全栈和python的区别 ?
  2. Android SDK 2.3与Eclipse最新版开发环境搭建(一)
  3. 如何应用streamlit开发一个网络应用程序?
  4. 第六讲:软考中高项06_质量管理、人力资源管理
  5. java 12-3 StringBuffer的添加和删除功能
  6. CV:利用cv2自带两步法haarcascade_frontalcatface.xml实现对猫脸检测
  7. Windows10上怎样开启FTP服务
  8. 图像算法处理视频不稳定?港科大团队提出一种通用算法解决视频处理时域不稳定问题
  9. 机器学习实战——AdaBoost
  10. springboot实现数据库读写分离的一款框架
  11. 怎么把度分秒化成小数_度分秒转换成小数
  12. 我们真的需要复杂的密码吗?
  13. 杭电acm a+b问题
  14. 简单的node文件上传下载及中文乱码问题解决
  15. 光纤通信系统组成总结及相干光通信基础
  16. 基于Pytorch实现猫狗分类
  17. 第三方支付平台结算流程是什么样的?
  18. Log4J使用说明书
  19. 车牌识别实践(python+OpenCV+CNN)
  20. CityEngine基础数据导入

热门文章

  1. CSS 解决火狐浏览器打印时,背景颜色丢失的问题
  2. 雅虎高管解读财报 将在今年完成阿里资产剥离
  3. springboot+thymeleaf实例
  4. 论文笔记:Federated Graph Neural Networks: Overview, Techniques and Challenges
  5. Python 利用数据分布直方图来确定合适的阈值
  6. 电商用户行为预测数据初探
  7. 西南民族大学第十届校赛(同步赛)(J题——怪盗基德 月之瞳宝石)
  8. 使用zepto.js完成的手机相册
  9. 2019年java_Java回顾#1 – 2019年社区亮点
  10. 邮储银行您在我行留存的身份信息不准确.. 解决