Pygame实战练习之纸牌21点游戏
导语
文章图片
?
昨天不是周天嘛?
你们在家放松一般都会做什么呢?
周末逛逛街,出去走走看电影......这是你们的周末。
程序员的周末就是在家躺尸唐诗躺尸,偶尔加班加班加班,或者跟着几个朋友在家消遣时间打打麻将,扑克牌玩一下!
文章图片
?
尤其是放长假【ps:也没啥假,长假就是过年】在老家的时候,亲戚尤其多,七大姑八大姨的一年好不容易聚一次,打打麻将跟扑克这是常有的事儿,联络下感情这是最快的方式~
说起打扑克,我们经常就是玩儿的二百四、炸金花、三个打一个那就是叫啥名字来着,容我想想......
文章图片
?
?话说真词穷,我们那都是方言撒,我翻译不过来普通话是叫什么了,我估计240你们也没听懂是啥,23333~
文章图片
?
今天的话小编是带大家做一款21点的扑克游戏!
有大佬可优化一下这个代码,做一个精致豪华的界面就好了~~
文章图片
?
正文
游戏规则:21点又名黑杰克,该游戏由2到6个人玩,使用除大小王之外的52张牌,游戏者的目标是使手中的牌的点数之和不超过21点且尽量大。当使用1副牌时,以下每种牌各一张(没有大小王):
?
文章图片
(1)初始化玩家数:
def iniGame():global playerCount, cardswhile(True):try:playerCount = int(input('输入玩家数:'))except ValueError:print('无效输入!')continueif playerCount < 2:print('玩家必须大于1!')continueelse:breaktry:decks = int(input('输入牌副数:(默认等于玩家数)'))except ValueError:print('已使用默认值!')decks = playerCountprint('玩家数:', playerCount, ',牌副数:', decks)cards = getCards(decks)# 洗牌
(2)建立了玩家列表,电脑跟玩家对战。
def createPlayerList():global playerListplayerList = []for i in range(playerCount):playerList += [{'id': '', 'cards': [], 'score': 0}].copy()playerList[i]['id'] = '电脑' + str(i+1)playerList[playerCount-1]['id'] = '玩家'random.shuffle(playerList)# 为各玩家随机排序
(3)开始会设置2张明牌玩法都可以看到点数。
def gameStart():print('为各玩家分2张明牌:')for i in range(playerCount):# 为每个玩家分2张明牌deal(playerList[i]['cards'], cards, 2)playerList[i]['score'] = getScore(playerList[i]['cards'])# 计算初始得分print(playerList[i]['id'], ' ', getCardName(playerList[i]['cards']),' 得分 ', playerList[i]['score'])time.sleep(1.5)
(4)游戏为电脑跟玩家依次分发第三张暗牌,这是别人看不到的。
def gamePlay():for i in range(playerCount):print('当前', playerList[i]['id'])if playerList[i]['id'] == '玩家':# 玩家while(True):print('当前手牌:', getCardName(playerList[i]['cards']))_isDeal = input('是否要牌?(y/n)')if _isDeal == 'y':deal(playerList[i]['cards'], cards)print('新牌:', getCardName(playerList[i]['cards'][-1]))# 重新计算得分:playerList[i]['score'] = getScore(playerList[i]['cards'])elif _isDeal == 'n':breakelse:print('请重新输入!')else:# 电脑while(True):if isDeal(playerList[i]['score']) == 1:# 为电脑玩家判断是否要牌deal(playerList[i]['cards'], cards)print('要牌。')# 重新计算得分:playerList[i]['score'] = getScore(playerList[i]['cards'])else:print('不要了。')breaktime.sleep(1.5)
(5)随机洗牌:
def getCards(decksNum):cardsList = ['Aa', 'Ab', 'Ac', 'Ad','Ka', 'Kb', 'Kc', 'Kd','Qa', 'Qb', 'Qc', 'Qd','Ja', 'Jb', 'Jc', 'Jd','0a', '0b', '0c', '0d','9a', '9b', '9c', '9d','8a', '8b', '8c', '8d','7a', '7b', '7c', '7d','6a', '6b', '6c', '6d','5a', '5b', '5c', '5d','4a', '4b', '4c', '4d','3a', '3b', '3c', '3d','2a', '2b', '2c', '2d']cardsList *= decksNum# 牌副数random.shuffle(cardsList)# 随机洗牌return cardsList
(6)设置牌名字典:
cardNameDict = {'Aa': '黑桃A', 'Ab': '红桃A', 'Ac': '梅花A', 'Ad': '方片A','Ka': '黑桃K', 'Kb': '红桃K', 'Kc': '梅花K', 'Kd': '方片K','Qa': '黑桃Q', 'Qb': '红桃Q', 'Qc': '梅花Q', 'Qd': '方片Q','Ja': '黑桃J', 'Jb': '红桃J', 'Jc': '梅花J', 'Jd': '方片J','0a': '黑桃10', '0b': '红桃10', '0c': '梅花10', '0d': '方片10','9a': '黑桃9', '9b': '红桃9', '9c': '梅花9', '9d': '方片9','8a': '黑桃8', '8b': '红桃8', '8c': '梅花8', '8d': '方片8','7a': '黑桃7', '7b': '红桃7', '7c': '梅花7', '7d': '方片7','6a': '黑桃6', '6b': '红桃6', '6c': '梅花6', '6d': '方片6','5a': '黑桃5', '5b': '红桃5', '5c': '梅花5', '5d': '方片5','4a': '黑桃4', '4b': '红桃4', '4c': '梅花4', '4d': '方片4','3a': '黑桃3', '3b': '红桃3', '3c': '梅花3', '3d': '方片3','2a': '黑桃2', '2b': '红桃2', '2c': '梅花2', '2d': '方片2'}
(7)判断胜负:
def showWinAndLose():loserList = []# [['id', score], ['id', score], ...]winnerList = []# [['id', score], ['id', score], ...]winnerCount = 0loserCount = 0for i in range(playerCount):if playerList[i]['score'] > 21:# 爆牌直接进入败者列表loserList.append([playerList[i]['id'],playerList[i]['score']])else:# 临时胜者列表winnerList.append([playerList[i]['id'], playerList[i]['score']])if len(winnerList) == 0:# 极端情况:全部爆牌print('全部玩家爆牌:')for i in range(len(loserList)):print(loserList[i][0], loserList[i][1])elif len(loserList) == 0:# 特殊情况:无人爆牌winnerList.sort(key=lambda x: x[1], reverse=True)# 根据分数值排序胜者列表for i in range(len(winnerList)):# 计算最低分玩家数量if i != len(winnerList)-1:if winnerList[-i-1][1] == winnerList[-i-2][1]:loserCount = (i+2)else:if loserCount == 0:loserCount = 1breakelse:loserCount = len(loserList)if loserCount == 1:loserList.append(winnerList.pop())else:while(len(loserList) != loserCount):loserList.append(winnerList.pop())for i in range(len(winnerList)):# 计算最高分玩家数量if i != len(winnerList)-1:if winnerList[i][1] == winnerList[i+1][1]:winnerCount = (i+2)else:if winnerCount == 0:winnerCount = 1breakelse:winnerCount = len(winnerList)while(len(winnerList) != winnerCount):winnerList.pop()print('获胜:')for i in range(len(winnerList)):print(winnerList[i][0], winnerList[i][1])print('失败:')for i in range(len(loserList)):print(loserList[i][0], loserList[i][1])else:# 一般情况:有人爆牌winnerList.sort(key=lambda x: x[1], reverse=True)# 根据分数值排序胜者列表for i in range(len(winnerList)):# 计算最高分玩家数量if i != len(winnerList)-1:if winnerList[i][1] == winnerList[i+1][1]:winnerCount = (i+2)else:if winnerCount == 0:winnerCount = 1breakelse:winnerCount = len(winnerList)while(len(winnerList) != winnerCount):winnerList.pop()print('获胜:')for i in range(len(winnerList)):print(winnerList[i][0], winnerList[i][1])print('失败:')for i in range(len(loserList)):print(loserList[i][0], loserList[i][1])
游戏效果:咳咳咳.......感觉这游戏看运气也看胆量!!
?
文章图片
?总结
文章图片
?
哈哈哈!小编玩游戏比较废,你们要来试试嘛?无聊的时候可以摸摸鱼,打打酱油~
【Pygame实战练习之纸牌21点游戏】到此这篇关于Pygame实战练习之纸牌21点游戏的文章就介绍到这了,更多相关Pygame 21点内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 【生信技能树】R语言练习题|【生信技能树】R语言练习题 - 中级
- 绘本讲师训练营【24期】14/21阅读原创《小黑鱼》
- 绘本讲师训练营【18期】14/21《我的情绪小怪兽》故事会新体验
- 合理情绪疗法之试用|李克富思维训练营56/90
- 绘本讲师训练营7期9/21阅读原创《蜗牛屋|绘本讲师训练营7期9/21阅读原创《蜗牛屋 》
- 拆书方法训练营
- 阿菘的ScalersTalk第五轮新概念朗读持续力训练Day15|阿菘的ScalersTalk第五轮新概念朗读持续力训练Day15 20191025
- Python基础|Python基础 - 练习1
- 特种兵训练第四天
- 2018-09-03(李克富视角点评训练营81/90)|2018-09-03(李克富视角点评训练营81/90) 那只蛙从“井”爬出来又进入了“隧道”