当前位置:首页 > 软件开放 > 正文内容

用Python设计小游戏(python设计小游戏谁先走到17谁就赢)

软件开放2年前 (2023-01-09)2306

本篇文章给大家谈谈用Python设计小游戏,以及python设计小游戏谁先走到17谁就赢对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Python实现消消乐小游戏

pre{overflow-x: auto} 实现 消消乐的构成主要包括三部分:游戏主体、计分器、计时器,下面来看一下具体实现。

先来看一下游戏所需 Python 库。

import os import sys import time import pygame import random

定义一些常量,比如:窗口宽高、网格行列数等,代码如下:

WIDTH = 400 HEIGHT = 400 NUMGRID = 8 GRIDSIZE = 36 XMARGIN = (WIDTH - GRIDSIZE * NUMGRID) // 2 YMARGIN = (HEIGHT - GRIDSIZE * NUMGRID) // 2 ROOTDIR = os.getcwd() FPS = 30

接着创建一个主窗口,代码如下:

pygame.init() screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption('消消乐')

看一下效果:

再接着在窗口中画一个 8 x 8 的网格,代码如下:

screen.fill((255, 255, 220)) # 游戏界面的网格绘制 def drawGrids(self): for x in range(NUMGRID): for y in range(NUMGRID): rect = pygame.Rect((XMARGIN+x*GRIDSIZE, YMARGIN+y*GRIDSIZE, GRIDSIZE, GRIDSIZE)) self.drawBlock(rect, color=(255, 165, 0), size=1 # 画矩形 block 框 def drawBlock(self, block, color=(255, 0, 0), size=2): pygame.draw.rect(self.screen, color, block, size)

看一下效果:

再接着在网格中随机放入各种拼图块,代码如下:

while True: self.all_gems = [] self.gems_group = pygame.sprite.Group() for x in range(NUMGRID): self.all_gems.append([]) for y in range(NUMGRID): gem = Puzzle(img_path=random.choice(self.gem_imgs), size=(GRIDSIZE, GRIDSIZE), position=[XMARGIN+x*GRIDSIZE, YMARGIN+y*GRIDSIZE-NUMGRID*GRIDSIZE], downlen=NUMGRID*GRIDSIZE) self.all_gems[x].append(gem) self.gems_group.add(gem) if self.isMatch()[0] == 0: break

看一下效果:

再接着加入计分器和计时器,代码如下:

# 显示得分 def drawScore(self): score_render = self.font.render('分数:'+str(self.score), 1, (85, 65, 0)) rect = score_render.get_rect() rect.left, rect.top = (55, 15) self.screen.blit(score_render, rect) # 显示加分 def drawAddScore(self, add_score): score_render = self.font.render('+'+str(add_score), 1, (255, 100, 100)) rect = score_render.get_rect() rect.left, rect.top = (250, 250) self.screen.blit(score_render, rect) # 显示剩余时间 def showRemainingTime(self): remaining_time_render = self.font.render('倒计时: %ss' % str(self.remaining_time), 1, (85, 65, 0)) rect = remaining_time_render.get_rect() rect.left, rect.top = (WIDTH-190, 15) self.screen.blit(remaining_time_render, rect)

看一下效果:

当设置的游戏时间用尽时,我们可以生成一些提示信息,代码如下:

while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() if event.type == pygame.KEYUP and event.key == pygame.K_r: flag = True if flag: break screen.fill((255, 255, 220)) text0 = '最终得分: %s' % score text1 = '按 R 键重新开始' y = 140 for idx, text in enumerate([text0, text1]): text_render = font.render(text, 1, (85, 65, 0)) rect = text_render.get_rect() if idx == 0: rect.left, rect.top = (100, y) elif idx == 1: rect.left, rect.top = (100, y) y += 60 screen.blit(text_render, rect) pygame.display.update()

看一下效果:

说完了游戏图形化界面相关的部分,我们再看一下游戏的主要处理逻辑。

我们通过鼠标来操纵拼图块,因此程序需要检查有无拼图块被选中,代码实现如下:

def checkSelected(self, position): for x in range(NUMGRID): for y in range(NUMGRID): if self.getGemByPos(x, y).rect.collidepoint(*position): return [x, y] return None

我们需要将鼠标连续选择的拼图块进行位置交换,代码实现如下:

def swapGem(self, gem1_pos, gem2_pos): margin = gem1_pos[0] - gem2_pos[0] + gem1_pos[1] - gem2_pos[1] if abs(margin) != 1: return False gem1 = self.getGemByPos(*gem1_pos) gem2 = self.getGemByPos(*gem2_pos) if gem1_pos[0] - gem2_pos[0] == 1: gem1.direction = 'left' gem2.direction = 'right' elif gem1_pos[0] - gem2_pos[0] == -1: gem2.direction = 'left' gem1.direction = 'right' elif gem1_pos[1] - gem2_pos[1] == 1: gem1.direction = 'up' gem2.direction = 'down' elif gem1_pos[1] - gem2_pos[1] == -1: gem2.direction = 'up' gem1.direction = 'down' gem1.target_x = gem2.rect.left gem1.target_y = gem2.rect.top gem1.fixed = False gem2.target_x = gem1.rect.left gem2.target_y = gem1.rect.top gem2.fixed = False self.all_gems[gem2_pos[0]][gem2_pos[1]] = gem1 self.all_gems[gem1_pos[0]][gem1_pos[1]] = gem2 return True

每一次交换拼图块时,我们需要判断是否有连续一样的三个及以上拼图块,代码实现如下:

def isMatch(self): for x in range(NUMGRID): for y in range(NUMGRID): if x + 2  -2: for each in [res_match[1], res_match[1]+1, res_match[1]+2]: gem = self.getGemByPos(*[each, start]) if start == res_match[2]: self.gems_group.remove(gem) self.all_gems[each]

本篇文章给大家谈谈用Python设计小游戏,以及python设计小游戏谁先走到17谁就赢对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

 = None elif start = 0: gem.target_y += GRIDSIZE gem.fixed = False gem.direction = 'down' self.all_gems[each][start+1] = gem else: gem = Puzzle(img_path=random.choice(self.gem_imgs), size=(GRIDSIZE, GRIDSIZE), position=[XMARGIN+each*GRIDSIZE, YMARGIN-GRIDSIZE], downlen=GRIDSIZE) self.gems_group.add(gem) self.all_gems[each][start+1] = gem start -= 1 elif res_match[0] == 2: start = res_match[2] while start  -4: if start == res_match[2]: for each in range(0, 3): gem = self.getGemByPos(*[res_match[1], start+each]) self.gems_group.remove(gem) self.all_gems[res_match[1]][start+each] = None elif start = 0: gem = self.getGemByPos(*[res_match[1], start]) gem.target_y += GRIDSIZE * 3 gem.fixed = False gem.direction = 'down' self.all_gems[res_match[1]][start+3] = gem else: gem = Puzzle(img_path=random.choice(self.gem_imgs), size=(GRIDSIZE, GRIDSIZE), position=[XMARGIN+res_match[1]*GRIDSIZE, YMARGIN+start*GRIDSIZE], downlen=GRIDSIZE*3) self.gems_group.add(gem) self.all_gems[res_match[1]][start+3] = gem start -= 1

之后反复执行这个过程,直至耗尽游戏时间,游戏结束。

最后,我们动态看一下游戏效果。

总结

本文我们使用 Python 实现了一个简单的消消乐游戏,有兴趣的可以对游戏做进一步扩展,比如增加关卡等。

到此这篇关于Python实现消消乐小游戏的文章就介绍到这了,希望大家以后多多支持!

用Python写一个简单的小游戏

相信大家都玩过俄罗斯方块吧,应该是小时候的回忆吧,但是想不想了解一下这个程序是怎么写出来的呢,自己写出来的应该玩起来更有感觉吧!

感觉还是蛮好玩吧!

接下来,我就分享一下这个游戏的源码过程啊!

先用python创建一个py文件

定义这次程序所需要的类

然后写出它所需要的模块

画背景图

画网格线

# 画已经落下的方块

# 画单个方块

# 画得分等信息

这样就可以写出来一个十分简单的俄罗斯方块啦,是不是觉得还不错呢!

python简单小游戏代码 怎么用Python制作简单小游戏

1、Python猜拳小游戏代码:

2、import random #导入随机模块

3、

4、num = 1

5、yin_num = 0

6、shu_num = 0

7、while num 2:

12、 print('不能出大于2的值')

13、 else:

14、 data = ['石头', '剪刀', '布']

15、 com = random.randint(0, 2)

16、 print(您出的是{},电脑出的是{}.format(data[user], data[com]))

17、 if user == com:

18、 print('平局')

19、 continue

20、 elif (user == 0 and com == 1) or (user == 1 and com == 2) or (user == 2 and com == 0):

21、 print('你赢了')

22、 yin_num += 1

23、 else:

24、 print('你输了')

25、 shu_num += 1

26、 num += 1

27、Python数字炸弹小游戏代码:

28、import random

29、import time

30、

31、bomb = random.randint(1, 99)

32、print(bomb)

33、start = 0

34、end = 99

35、while 1 == 1:

36、

37、 people = int(input('请输入{}到{}之间的数:'.format(start, end)))

38、 if people bomb:

39、 print('大了')

40、 end = people

41、 elif people bomb:

42、 print('小了')

43、 start = people

44、 else:

45、 print('BOOM!!!')

46、 break

47、 print('等待电脑了输入{}到{}之间的数:'.format(start, end))

48、 time.sleep(1)

49、 com = random.randint(start + 1, end - 1)

50、 print('电脑输入:{}'.format(com))

51、 if com bomb:

52、 print('大了')

53、 end = com

54、 elif com bomb:

55、 print('小了')

56、 start = com

57、 else:

58、 print('BOOM!!!')

59、 break

用Python设计小游戏的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于python设计小游戏谁先走到17谁就赢、用Python设计小游戏的信息别忘了在本站进行查找喔。

扫描二维码推送至手机访问。

版权声明:本文由飞速云SEO网络优化推广发布,如需转载请注明出处。

本文链接:http://chlfg.com/post/3142.html

分享给朋友:

“用Python设计小游戏(python设计小游戏谁先走到17谁就赢)” 的相关文章

软件开发公司(软件开发公司上班的收获跟感受800字)

软件开发公司(软件开发公司上班的收获跟感受800字)

本篇文章给大家谈谈软件开发公司,以及软件开发公司上班的收获跟感受800字对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、软件开发公司有哪些? 2、如何选择软件开发公司 3、软件定制开发公司哪家好? 4、软件开发比较好的公司 软件开发公司有哪些? 极其流行,同...

源码商城交易平台源码支付宝(源码交易网)

源码商城交易平台源码支付宝(源码交易网)

本篇文章给大家谈谈源码商城交易平台源码支付宝,以及源码交易网对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、找一个网上商城源码 2、商城怎么链接上支付宝支付! 3、支付宝的订单系统怎么弄啊PHP源码 4、支付宝支付页面iapp源码求谁有 5、支付宝源代码?...

大话西游端游5开搬砖(大话西游端游5开搬砖一天收入)

大话西游端游5开搬砖(大话西游端游5开搬砖一天收入)

今天给各位分享大话西游端游5开搬砖的知识,其中也会对大话西游端游5开搬砖一天收入进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、搞台台式电脑五开搬砖玩梦幻西游和大话西游的电脑要什么配置? 2、大话西游2五开搬砖级高点的号选多少级合适 3、大话西游免费...

uniapp项目结构(uniapp 架构)

uniapp项目结构(uniapp 架构)

今天给各位分享uniapp项目结构的知识,其中也会对uniapp 架构进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、如何建立uniapp websocket服务端,要怎么实现? 2、基于 UniAPP 项目多端开发 3、uniapp原生插件开发(i...

html网页制作案例制作电影宣传效果西游降魔篇代码的简单介绍

html网页制作案例制作电影宣传效果西游降魔篇代码的简单介绍

本篇文章给大家谈谈html网页制作案例制作电影宣传效果西游降魔篇代码,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、静态网页制作 2、怎样制作html网页 3、html 的问题 关于网页制作 4、需要一份html教程的网页制作,主题是我的个人网页,...

qrs间期100ms是否正常(qrs多少正常范围)

qrs间期100ms是否正常(qrs多少正常范围)

今天给各位分享qrs间期100ms是否正常的知识,其中也会对qrs多少正常范围进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、医生您好!心电图检查:心室率:88bpm,pr间期:142ms,qrs时限100ms,qt/qtc 2、心电图 QRS100 Q...