「Pygame小游戏」真香这款百万销量万人追捧大富翁游戏终于出现了

前言

说到童年爱玩的电脑游戏,你会想到什么?

?

搞错了,以前没得王者、吃鸡的——那时候最国民的莫过于金山打字通,接着是扫雷、红心大战,

而红极一时的单机游戏当属《大富翁》。

扫雷是刚给大家讲过的AI自动扫雷,今天的话就给大家将讲讲《大富翁》游戏吧~

(这可是我搞了好久好久了的,看完给个吧万分感谢!恭喜发财恭喜发财

?

一、《大富翁》思路

本文是基于python的一个2D大富翁游戏1.游戏地图为自己使用各种网络素材制作:各种按钮和选项,小图标等也是使用PS制作。2.声音效果主要为背景音乐和几种游戏中的音效。3.游戏设定了两个类:玩家和建筑,玩家的参数和方法都在代码中给出,具体有:移动方法、位置判断方法、购买房屋方法、添加小房子方法、事件判断方法。4.玩家在大富翁的主要操作是投掷骰子,由随机函数进行判定然后进行移动,进行位置判断,然后开始进行相关的判定。5.游戏中的按键有:是、否、和结束回合,每个按键由没按下与按下两种状态的图片组成,这个设计花费了一定时间。还有开始游戏和扔骰子的两个明暗按钮,由pygame优化后的一个函数实现。6.玩家的位置与电脑重叠时会将双方的位置进行一定偏移,防止被覆盖,分不清自己的位置。7.游戏基础功能有移动,购买房子,在已经购买的房子下搭建新的小房子增加过路费,被收费,判断胜负的基项功能,此外还加入了幸运事件:财神-免收费一次衰神-双倍被收费一次破坏神-直接破坏一个建筑无论敌我土地神-强占对面建筑这四项功能在位置处于左上角和右下角的时候会被触发,添加了很多游戏乐趣啦~希望大家能喜欢哦!

二、环境准备环境安装

Python3、Pycharm、Pygame。

第三方库的安装:pipinstallpygame素材图片(音乐就不截图了)

?

三、效果展示:

游戏规则:

1,扔的骰子点数为你可走几格。

2,当走到任一格,其经营权没有被拥有时,可以按棋盘中标的价格买下并拥有它。如你的钱不

够,或不想买,则此时其它的参与者可竞价买下。如果这一经营权是你自己拥有,则不用付钱,比如

果是另人拥有,则按经营权上的价格付给经营权拥有者。

…….大家可以百度下游戏规则哈哈哈不会玩儿的话……我就随便地给大家介绍一下下啦

开始界面一一

?

游戏界面——

?

游戏中掷色子——

?

还有很多界面我就不一一截图了哈!大家自己玩儿!需要代码的都是滴滴我就行了!

四、代码演示

#--coding:utf-8--#初始化各种模块importpygameimportrandomimportsys#定义类classPlayer():definit(self,image,name,isPlayer):self.name=nameself.money=10000self.isGoingToMove=Falseself.movable=Trueself.image=imageself.position=0self.temp_position=Falseself.dice_value=0self.locatedBuilding=0self.showText=[]self.isPlayer=isPlayerself.ownedBuildings=[]self.isShowText=Falseself.soundPlayList=0self.caishen=0self.shuaishen=0self.tudishen=0self.pohuaishen=0defjudgePosition(self,buildings):#位置判断返回值是所在位置的建筑foreachinbuildings:foreveryineach.location:ifself.position==every:returneach#当使用元组时当元组中只有一个元素时发现该元素不可迭代#出现错误换成列表后解决‘’‘try:foreveryineach.location:ifself.position==every:print(each.name)except:ifself.position==every:print(each.name)’‘’defbuyaBuilding(self,isPressYes):#购买方法ifisPressYesandself.locatedBuilding.owner!=self.name:self.locatedBuilding.owner=self.nameself.locatedBuilding.wasBought=Trueself.ownedBuildings.append(self.locatedBuilding)self.money-=self.locatedBuilding.priceself.showText=[self.name+‘购买了’+self.locatedBuilding.name+‘!’]self.soundPlayList=1returnTrueelse:returnFalsedefaddaHouse(self,isPressYes):#在建筑物上添加一个房子try:ifisPressYesandself.locatedBuilding.owner==self.name:self.locatedBuilding.builtRoom+=1self.money-=self.locatedBuilding.paymentself.showText=[self.name+‘在’+self.locatedBuilding.name+‘上!’,‘盖了一座房子!’,'有%d‘%self.locatedBuilding.builtRoom+’个房子了!‘,"它的过路费是%d“%(self.locatedBuilding.payment(self.locatedBuilding.builtRoom+1))]self.soundPlayList=2returnTrueelse:returnFalseexcept:passdefmove(self,buildings,allplayers):#移动方法返回值是所在的建筑位置self.dice_value=random.randint(1,6)self.position+=self.dice_valueifself.position>=16:self.position-=16self.locatedBuilding=self.judgePosition(buildings)self.isShowText=Truereturnself.eventInPosition(allplayers)defeventInPosition(self,allplayers):#判断在建筑位置应该发生的事件building=self.locatedBuildingifbuilding.name!=’空地‘:ifself.locatedBuilding.wasBought==False:#未购买的时候显示建筑的数据!ifself.isPlayer==True:textLine0=self.name+’扔出了‘+’%d‘%self.dice_value+’点!‘textLine1=self.name+’来到了‘+building.name+’!‘textLine2=’购买价格:%d‘%building.pricetextLine3=’过路收费:%d‘%building.paymenttextLine4=’是否购买?‘self.showText=[textLine0,textLine1,textLine2,textLine3,textLine4]returnTrueelse:self.addaHouse(notself.buyaBuilding(True))#—–动画——-#—–是否购买——elifbuilding.owner==self.name:#路过自己的房子开始加盖建筑!ifself.pohuaishen==1:textLine0=self.name+’破坏神附体!‘textLine1=’摧毁了自己的房子!‘building.owner=’no‘building.wasBought=Falseself.showText=[textLine0,textLine1]self.pohuaishen=0else:ifself.isPlayer==True:textLine0=self.name+’扔出了‘+’%d‘%self.dice_value+’点!‘textLine1=’来到了ta的‘+self.locatedBuilding.name+’!‘textLine2=’可以加盖小房子!‘textLine3=’加盖收费:%d‘%building.paymenttextLine4=’是否加盖?‘self.showText=[textLine0,textLine1,textLine2,textLine3,textLine4]returnTrue#—–动画——-else:self.addaHouse(True)else:foreachinallplayers:#被收费!ifself.locatedBuilding.owner==each.nameandeach.name!=self.name:ifself.caishen==1:textLine0=self.name+’财神附体!‘textLine1=’免除过路费%d!‘%(building.payment(building.builtRoom+1))self.showText=[textLine0,textLine1]self.caishen=0else:ifself.tudishen==1:textLine0=self.name+’土地神附体!‘textLine1=’强占土地!‘textLine2=building.name+’现在属于‘+self.nameself.locatedBuilding.owner=self.nameself.showText=[textLine0,textLine1,textLine2]self.tudishen=0else:ifself.pohuaishen==1:textLine0=self.name+’破坏神附体!‘textLine1=’摧毁了对手的房子!‘building.owner=’no‘building.wasBought=Falseself.showText=[textLine0,textLine1]self.pohuaishen=0else:textLine0=self.name+’扔出了‘+’%d‘%self.dice_value+’点!‘textLine1=self.name+’来到了‘+each.name+’的:‘textLine2=building.name+’,被收费!‘ifself.shuaishen==1:textLine3=’过路收费:%d2!‘%(building.payment(building.builtRoom+1)2)self.shuaishen=0else:textLine3=’过路收费:%d‘%(building.payment(building.builtRoom+1))textLine4=’哦!‘+self.name+’好倒霉!‘self.showText=[textLine0,textLine1,textLine2,textLine3,textLine4]#收费!self.money-=building.payment(building.builtRoom+1)each.money+=building.payment(building.builtRoom+1)self.soundPlayList=3#—–动画——-else:#发现不能处理在空地上的情况于是使用try&except来解决!然后加入了幸运事件功能!#后来发现tryexcept弊端太大找不到错误的根源换为ifelse嵌套。。whichone=self.dice_value%4ifwhichone==0:self.caishen=1textLine2=’遇到了财神!‘textLine3=’免一次过路费!‘ifwhichone==1:self.shuaishen=1textLine2=’遇到了衰神!‘textLine3=’过路费加倍一次!‘ifwhichone==2:self.tudishen=1textLine2=’遇到了土地神!‘textLine3=’强占一次房子!‘ifwhichone==3:self.pohuaishen=1textLine3=’摧毁路过的房子!‘textLine2=’遇到了破坏神!‘textLine0=self.name+’扔出了‘+’%d‘%self.dicevalue+’点!‘textLine1=’来到了运气地点!‘self.showText=[textLine0,textLine1,textLine2,textLine3]classBuilding():#好像所有功能都在Player类里实现了==definit(self,name,price,payment,location):self.name=nameself.price=priceself.payment=paymentself.location=locationself.wasBought=False#是否被购买self.builtRoom=0#小房子建造的数目self.owner=’no‘#带透明度的绘图方法byturtle2333defblit_alpha(target,source,location,opacity):x=location[0]y=location[1]temp=pygame.Surface((source.get_width(),source.get_height())).convert()temp.blit(target,(-x,-y))temp.blit(source,(0,0))temp.set_alpha(opacity)target.blit(temp,location)########################################主函数###############################################defmain():pygame.init()clock=pygame.time.Clock()#初始化屏幕size=(1270,768)screen=pygame.display.set_mode(size)pygame.display.set_caption(”大富翁-by顾木子吖“)#读取字体以及有关数据textColorInMessageBox=(141,146,152)white=(255,255,255)black=(0,0,0)red=(255,0,0)font=pygame.font.Font(’resource\font\myfont.ttf‘,30)#读取资源backgroud=pygame.image.load(”resource\pic\GameMap.png“)chess=pygame.image.load(”resource\pic\chess.png“)chess_com=pygame.image.load(”resource\pic\chess1.png“)bigdice_image=pygame.image.load(”resource\pic\dice.png“).convert_alpha()dice_1=pygame.image.load(”resource\pic\dice_1.png“)dice_2=pygame.image.load(”resource\pic\dice_2.png“)dice_3=pygame.image.load(”resource\pic\dice_3.png“)dice_4=pygame.image.load(”resource\pic\dice_4.png“)dice_5=pygame.image.load(”resource\pic\dice_5.png“)dice_6=pygame.image.load(”resource\pic\dice_6.png“)dices=[dice_1,dice_2,dice_3,dice_4,dice_5,dice_6]yes=pygame.image.load(”resource\pic\yes.png“)yes2=pygame.image.load(”resource\pic\yes2.png“)no=pygame.image.load(”resource\pic\no.png“)no2=pygame.image.load(”resource\pic\no2.png“)GameStart=pygame.image.load(”resource\pic\GameStart.png“)StartGameButton=pygame.image.load(”resource\pic\StartGameButton.png“).convert_alpha()turnover=pygame.image.load(”resource\pic\turnover.png“)turnover2=pygame.image.load(”resource\pic\turnover2.png“)shuaishen=pygame.image.load(”resource\pic\shuaishen.png“).convert_alpha()tudishen=pygame.image.load(”resource\pic\tudishen.png“).convert_alpha()caishen=pygame.image.load(”resource\pic\caishen.png“).convert_alpha()pohuaishen=pygame.image.load(”resource\pic\pohuaishen.png“).convert_alpha()rollDiceSound=pygame.mixer.Sound(”resource\sound\rolldicesound.wav“)bgm=pygame.mixer.music.load(”resource\sound\bgm.ogg“)throwcoin=pygame.mixer.Sound(”resource\sound\throwcoin.wav“)moneysound=pygame.mixer.Sound(”resource\sound\moneysound.wav“)aiyo=pygame.mixer.Sound(”resource\sound\aiyo.wav“)didong=pygame.mixer.Sound(”resource\sound\didong.wav“)#PlayList在对象中设置应该播放的声音playList=[moneysound,throwcoin,aiyo]#各种Surface的rectbigdice_rect=bigdice_image.get_rect()bigdice_rect.left,bigdice_rect.top=50,600yes_rect=yes.get_rect()yes_rect.left,yes_rect.top=500,438no_rect=no.get_rect()no_rect.left,no_rect.top=630,438button_rect=StartGameButton.get_rect()button_rect.left,button_rect.top=1003,30turnover_rect=turnover.get_rect()turnover_rect.left,turnover_rect.top=1035,613#实例化对象players=[]computers=[]allplayers=[]player_1=Player(chess,’玩家‘,True)player_com1=Player(chess_com,’电脑‘,False)players.append(player_1)computers.append(player_com1)allplayers.append(player_1)allplayers.append(player_com1)presentPlayer=player_com1#初始化建筑物数据gate=Building(’大门‘,1000,200,[1,2])fountain=Building(’喷泉‘,2000,400,[3,4])path=Building(’小道‘,800,160,[5])library=Building(’图书馆‘,2000,400,[6,7])kongdi1=Building(’空地‘,0,0,[8])classroomTen=Building(’教十‘,1200,240,[9,10])classroomNine=Building(’教九‘,1200,240,[11,12])resOne=Building(’三餐厅‘,800,160,[13])resTwo=Building(’二餐厅‘,800,160,[14])resThree=Building(’一餐厅‘,800,160,[15])kongdi2=Building(’空地‘,0,0,[0])buildings=[gate,fountain,path,library,classroomNine,\classroomTen,resOne,resThree,resTwo,kongdi1,kongdi2]#坐标数据同时处理坐标数据使之合适MapXYvalue=[(435.5,231.5),(509.5,231.5),(588.5,231.5),(675.5,231.5),(758.5,231.5),(758.5,317.0),(758.5,405.5),(758.5,484.5),(758.5,558.5),(679.5,558.5),(601.5,558.5),(518.5,556.5),(435.5,556.5),(435.5,479.5),(435.5,399.0),(435.5,315.5)]MapChessPosition_Player=[]MapChessPosition_Com=[]MapChessPosition_Original=[]MapChessPosition_Payment=[]MapMessageBoxPosition=(474.1,276.9)YesNoMessageBoxPosition=[(500,438),(630,438)]StartGameButtonPosition=(1003,30)TurnOvwrButtonPosition=(1035,613)#调整位置foriinrange(0,16):MapChessPosition_Original.append((MapXYvalue[i][0]-50,MapXYvalue[i][1]-80))MapChessPosition_Player.append((MapXYvalue[i][0]-70,MapXYvalue[i][1]-60))MapChessPosition_Com.append((MapXYvalue[i][0]-30,MapXYvalue[i][1]-100))MapChessPosition_Payment.append((MapXYvalue[i][0]-30,MapXYvalue[i][1]-15))#循环时所用的一些变量running=Trueimage_alpha=255button_alpha=255half_alpha=30showdice=TrueshowYes2=FalseshowNo2=FalseshowYes_No=FalsepressYes=FalsewhetherYes_NoJudge=FalsegameStarted=FalseshowButton2=False#播放背景音乐pygame.mixer.music.play(100)########################################进入游戏循环!################################################循环开始!whilerunning:ifnotgameStarted:foreventinpygame.event.get():ifevent.type==pygame.QUIT:sys.exit()#明暗触发鼠标位置判断ifevent.type==pygame.MOUSEMOTION:ifbutton_rect.collidepoint(event.pos):button_alpha=255else:button_alpha=120ifevent.type==pygame.MOUSEBUTTONDOWN:ifbutton_rect.collidepoint(event.pos):#按下按钮didong.play()gameStarted=Truescreen.blit(GameStart,(0,0))blit_alpha(screen,StartGameButton,StartGameButtonPosition,button_alpha)ifgameStarted:foreventinpygame.event.get():ifevent.type==pygame.QUIT:sys.exit()#明暗触发鼠标位置判断ifevent.type==pygame.MOUSEMOTION:ifbigdice_rect.collidepoint(event.pos):image_alpha=255else:image_alpha=190ifevent.type==pygame.MOUSEBUTTONDOWN:ifbigdice_rect.collidepoint(event.pos):#按骰子ifpresentPlayer!=player_1:rollDiceSound.play(1,2000)pygame.time.delay(2000)showYes_No=player_1.move(buildings,allplayers)whetherYes_NoJudge=showYes_NopresentPlayer=player_1else:presentPlayer.showText=[’还没到你的回合!‘]ifturnover_rect.collidepoint(event.pos):#按回合结束showButton2=TrueifpresentPlayer!=player_com1:showYes_No=player_com1.move(buildings,allplayers)presentPlayer=player_com1else:presentPlayer.showText=[’还没到你的回合!‘]else:showButton2=False#不显示Yes_No的时候不能点击它们!ifwhetherYes_NoJudge==True:ifyes_rect.collidepoint(event.pos):#按是否showYes2=Trueifno_rect.collidepoint(event.pos):#按是否showNo2=Trueifevent.type==pygame.MOUSEBUTTONUP:ifturnover_rect.collidepoint(event.pos):#按回合结束showButton2=Falseifyes_rect.collidepoint(event.pos):#按是否showYes2=FalseshowYes_No=False#只有在可以判定的时候才能算按下了是同时将判断条件置为空ifwhetherYes_NoJudge==True:pressYes=TruewhetherYes_NoJudge=Falseifno_rect.collidepoint(event.pos):#按是否showNo2=FalsepressYes=FalseshowYes_No=FalsewhetherYes_NoJudge=False#测试事件选项ifevent.type==pygame.KEYDOWN:ifevent.key==pygame.K_w:showYes_No=player_1.move(buildings,allplayers)whetherYes_NoJudge=showYes_NopresentPlayer=player_1ifevent.key==pygame.K_q:showYes_No=player_com1.move(buildings,allplayers)presentPlayer=player_com1’‘’foreachinallplayers:ifeach.isGoingToMove==Trueandeach.movable==True:showYes_No=each.move(buildings,allplayers)each.movable=Falseeach.isGoingToMove=False‘’‘’‘’allisready=Trueforeachinallplayers:ifeach.movable==True:allisready=Falseifallisready:foreachinallplayers:each.movable=True‘’‘#购买房屋!!!!!!!!ifpresentPlayer.buyaBuilding(pressYes)==True:pressYes=FalseifpresentPlayer.addaHouse(pressYes)==True:pressYes=False#########################################################################screen.blit(backgroud,(0,0))blit_alpha(screen,bigdice_image,(50,600),image_alpha)textPosition=[MapMessageBoxPosition[0],MapMessageBoxPosition[1]]#打印信息foreachinpresentPlayer.showText:text=font.render(each,True,white,textColorInMessageBox)screen.blit(text,textPosition)textPosition[1]+=30#播放行动声音ifpresentPlayer.soundPlayList!=0:playList[presentPlayer.soundPlayList-1].play()presentPlayer.soundPlayList=0#在位置上显示过路费foriinrange(1,8):foreachinbuildings:foreveryineach.location:ifi==every:ifeach.owner==presentPlayer.name:text=font.render(’%d‘%(each.payment(each.builtRoom+1))\,True,red)elifeach.owner==’no‘:text=font.render(’%d‘%(each.payment(each.builtRoom+1))\,True,white)elifeach.owner!=presentPlayer.nameandeach.owner!=’no‘:text=font.render(’%d‘%(each.payment(each.builtRoom+1))\,True,black)screen.blit(text,MapChessPosition_Payment[i])foriinrange(9,16):foreachinbuildings:foreveryineach.location:ifi==every:ifeach.owner==presentPlayer.name:text=font.render(’%d‘%(each.payment(each.builtRoom+1))\,True,red)elifeach.owner==’no‘:text=font.render(’%d‘%(each.payment(each.builtRoom+1))\,True,white)elifeach.owner!=presentPlayer.nameandeach.owner!=’no‘:text=font.render(’%d‘%(each.payment(each.builtRoom+1))\,True,black)screen.blit(text,MapChessPosition_Payment[i])#打印金钱数和幸运状态money_1=font.render(player_1.name+’金钱:%d‘%player_1.money,True,black,white)screen.blit(money_1,(0,0))ifplayer_1.pohuaishen==True:screen.blit(pohuaishen,(0,30))else:blit_alpha(screen,pohuaishen,(0,30),half_alpha)ifplayer_1.caishen==True:screen.blit(caishen,(55,30))else:blit_alpha(screen,caishen,(55,30),half_alpha)ifplayer_1.shuaishen==True:screen.blit(shuaishen,(110,30))else:blit_alpha(screen,shuaishen,(110,30),half_alpha)ifplayer_1.tudishen==True:screen.blit(tudishen,(165,30))else:blit_alpha(screen,tudishen,(165,30),half_alpha)money_2=font.render(player_com1.name+’金钱:%d‘%player_com1.money,True,black,white)screen.blit(money_2,(1000,0))ifplayer_com1.pohuaishen==True:screen.blit(pohuaishen,(1000,30))else:blit_alpha(screen,pohuaishen,(1000,30),half_alpha)ifplayer_com1.caishen==True:screen.blit(caishen,(1055,30))else:blit_alpha(screen,caishen,(1055,30),half_alpha)ifplayer_com1.shuaishen==True:screen.blit(shuaishen,(1110,30))else:blit_alpha(screen,shuaishen,(1110,30),half_alpha)ifplayer_com1.tudishen==True:screen.blit(tudishen,(1165,30))else:blit_alpha(screen,tudishen,(1165,30),half_alpha)#放置扔出来的骰子ifplayer_1.dice_value!=0andshowdice:screen.blit(dices[player_1.dice_value-1],(70,450))#放置回合结束按钮ifshowButton2:screen.blit(turnover2,TurnOvwrButtonPosition)else:screen.blit(turnover,TurnOvwrButtonPosition)#放置是否按钮ifshowYes_No==True:screen.blit(yes,YesNoMessageBoxPosition[0])screen.blit(no,YesNoMessageBoxPosition[1])ifshowYes2==True:screen.blit(yes2,YesNoMessageBoxPosition[0])ifshowNo2==True:screen.blit(no2,YesNoMessageBoxPosition[1])#放置玩家与电脑的位置如果重合则挪位foreachinplayers:foreveryincomputers:ifeach.position==every.position:screen.blit(each.image,MapChessPosition_Player[each.position])screen.blit(every.image,MapChessPosition_Com[every.position])each.temp_position=Trueevery.temp_position=Trueforeachinplayers:ifeach.temp_position==False:screen.blit(each.image,MapChessPosition_Original[each.position])each.temp_position=Trueeach.temp_position=noteach.temp_positionforeveryincomputers:ifevery.temp_position==False:screen.blit(every.image,MapChessPosition_Original[every.position])every.temp_position=Trueevery.temp_position=notevery.temp_position#输赢判断foreachinallplayers:ifeach.money<=0:font=pygame.font.Font(’resource\font\myfont.ttf‘,200)loseText=font.render(each.name+’输了!‘,True,red)screen.fill(black)screen.blit(loseText,(100,100))font=pygame.font.Font(’resource\font\myfont.ttf‘,30)pygame.time.delay(3000)#画面运行pygame.display.flip()clock.tick(60)#刷新率#双击打开运行ifname==”main“:main()总结

又是一个下雨的周末,小朋友说:妈妈,我们玩”大富翁“的游戏吧!

妈妈说:”没没图纸,等下次到超市买一副“

小朋友说:”妈妈,你等等啊,我现在就敲代码了”然后他就做了一个Python版的《大富翁》游

戏!可以一直玩了!哈哈哈哈这个代码有没有深得你?。

源码领取:私信我即可!

?

?

本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。