怎么使用Python+Pygame实现走四棋儿游戏(pygame,python,开发技术)

时间:2024-04-30 22:34:34 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

一、游戏解说

“走四儿”大部分活跃在山东济南、聊城、菏泽等地,是一种棋类游戏,特别适合儿童试玩。

在一个4×4的棋盘上,双方各有4子,分别摆放在棋盘两个最上面的两端线的四个位置上。下图

就是“走四儿”开局的样子。

怎么使用Python+Pygame实现走四棋儿游戏

二、游戏规则

“走四儿”的游戏规则是:

1.双方轮流走,每一步只能在上下左右中的一个无子的方向上走一个格,不能斜走。如果一方无法移动,则由另一方走。

2.当甲方的一个子移动到一条线上之后,这条线上只有甲方的两个子和乙方的一个子,且甲方的这两子相连,乙方的子与甲方那两子中的一个子相连,那么乙方的这个子就被吃掉。

下图是可以吃子的样式例举:

怎么使用Python+Pygame实现走四棋儿游戏

3.少于2个子的一方为输者。双方都无法胜对方就可以认为是和棋。

三、环境安装

1)素材(图片)

怎么使用Python+Pygame实现走四棋儿游戏

2)运行环境 小编使用的环境:Python3、Pycharm社区版、Pygame、 numpy模块部分自带就不一一 展示啦。

模块安装:pip install -i https://pypi.douban.com/simple/+模块名

四、代码展示

importpygameaspgfrompygame.localsimport*importsysimporttimeimportnumpyasnppg.init()size=width,height=600,400screen=pg.display.set_mode(size)f_clock=pg.time.Clock()fps=30pg.display.set_caption("走四棋儿")background=pg.image.load("background.png").convert_alpha()glb_pos=[[(90,40),(190,40),(290,40),(390,40)],[(90,140),(190,140),(290,140),(390,140)],[(90,240),(190,240),(290,240),(390,240)],[(90,340),(190,340),(290,340),(390,340)]]classChessPieces():def__init__(self,img_name):self.name=img_nameself.id=Noneifself.name=='heart':self.id=2elifself.name=='spade':self.id=3self.img=pg.image.load(img_name+".png").convert_alpha()self.rect=self.img.get_rect()self.pos_x,self.pos_y=0,0self.alive_state=Truedefget_rect(self):return(self.rect[0],self.rect[1])defget_pos(self):return(self.pos_x,self.pos_y)defupdate(self):ifself.alive_state==True:self.rect[0]=glb_pos[self.pos_y][self.pos_x][0]self.rect[1]=glb_pos[self.pos_y][self.pos_x][1]screen.blit(self.img,self.rect)classPointer():def__init__(self):self.img=pg.image.load("pointer.png").convert_alpha()self.rect=self.img.get_rect()self.show=Falseself.selecting_item=Falsedefpoint_to(self,Heart_Blade_class):ifHeart_Blade_class.alive_state:self.pointing_to_item=Heart_Blade_classself.item_pos=Heart_Blade_class.get_rect()self.rect[0],self.rect[1]=self.item_pos[0],self.item_pos[1]-24defupdate(self):screen.blit(self.img,self.rect)classGlobalSituation():def__init__(self):self.glb_situation=np.array([[2,2,2,2],[0,0,0,0],[0,0,0,0],[3,3,3,3]],dtype=np.uint8)self.spade_turn=Nonedefrefresh_situation(self):self.glb_situation=np.zeros([4,4],np.uint8)foriinrange(4):ifheart[i].alive_state:self.glb_situation[heart[i].pos_y,heart[i].pos_x]=heart[i].idforiinrange(4):ifspade[i].alive_state:self.glb_situation[spade[i].pos_y,spade[i].pos_x]=spade[i].idforiinrange(4):print(self.glb_situation[i][:])print('='*12)ifself.spade_turn!=None:self.spade_turn=notself.spade_turndefcheck_situation(self,moved_item):curr_pos_x,curr_pos_y=moved_item.get_pos()curr_pos_col=self.glb_situation[:,curr_pos_x]curr_pos_raw=self.glb_situation[curr_pos_y,:]enemy_die=Falseifmoved_item.id==2:ifnp.sum(curr_pos_col)==7:if(curr_pos_col==np.array([0,2,2,3])).all():enemy_die=Trueself.glb_situation[3,curr_pos_x]=0forspade_iinspade:ifspade_i.alive_stateandspade_i.pos_x==curr_pos_xandspade_i.pos_y==3:spade_i.alive_state=Falseelif(curr_pos_col==np.array([2,2,3,0])).all():enemy_die=Trueself.glb_situation[2,curr_pos_x]=0forspade_iinspade:ifspade_i.alive_stateandspade_i.pos_x==curr_pos_xandspade_i.pos_y==2:spade_i.alive_state=Falseelif(curr_pos_col==np.array([0,3,2,2])).all():enemy_die=Trueself.glb_situation[1,curr_pos_x]=0forspade_iinspade:ifspade_i.alive_stateandspade_i.pos_x==curr_pos_xandspade_i.pos_y==1:spade_i.alive_state=Falseelif(curr_pos_col==np.array([3,2,2,0])).all():enemy_die=Trueself.glb_situation[0,curr_pos_x]=0forspade_iinspade:ifspade_i.alive_stateandspade_i.pos_x==curr_pos_xandspade_i.pos_y==0:spade_i.alive_state=Falseifnp.sum(curr_pos_raw)==7:if(curr_pos_raw==np.array([0,2,2,3])).all():enemy_die=Trueself.glb_situation[curr_pos_y,3]=0forspade_iinspade:ifspade_i.alive_stateandspade_i.pos_x==3andspade_i.pos_y==curr_pos_y:spade_i.alive_state=Falseelif(curr_pos_raw==np.array([2,2,3,0])).all():enemy_die=Trueself.glb_situation[curr_pos_y,2]=0forspade_iinspade:ifspade_i.alive_stateandspade_i.pos_x==2andspade_i.pos_y==curr_pos_y:spade_i.alive_state=Falseelif(curr_pos_raw==np.array([0,3,2,2])).all():enemy_die=Trueself.glb_situation[curr_pos_y,1]=0forspade_iinspade:ifspade_i.alive_stateandspade_i.pos_x==1andspade_i.pos_y==curr_pos_y:spade_i.alive_state=Falseelif(curr_pos_raw==np.array([3,2,2,0])).all():enemy_die=Trueself.glb_situation[curr_pos_y,0]=0forspade_iinspade:ifspade_i.alive_stateandspade_i.pos_x==0andspade_i.pos_y==curr_pos_y:spade_i.alive_state=Falseelifmoved_item.id==3:ifnp.sum(curr_pos_col)==8:if(curr_pos_col==np.array([0,3,3,2])).all():enemy_die=Trueself.glb_situation[3,curr_pos_x]=0forheart_iinheart:ifheart_i.alive_stateandheart_i.pos_x==curr_pos_xandheart_i.pos_y==3:heart_i.alive_state=Falseelif(curr_pos_col==np.array([3,3,2,0])).all():enemy_die=Trueself.glb_situation[2,curr_pos_x]=0forheart_iinheart:ifheart_i.alive_stateandheart_i.pos_x==curr_pos_xandheart_i.pos_y==2:heart_i.alive_state=Falseelif(curr_pos_col==np.array([0,2,3,3])).all():enemy_die=Trueself.glb_situation[1,curr_pos_x]=0forheart_iinheart:ifheart_i.alive_stateandheart_i.pos_x==curr_pos_xandheart_i.pos_y==1:heart_i.alive_state=Falseelif(curr_pos_col==np.array([2,3,3,0])).all():enemy_die=Trueself.glb_situation[0,curr_pos_x]=0forheart_iinheart:ifheart_i.alive_stateandheart_i.pos_x==curr_pos_xandheart_i.pos_y==0:heart_i.alive_state=Falseifnp.sum(curr_pos_raw)==8:if(curr_pos_raw==np.array([0,3,3,2])).all():enemy_die=Trueself.glb_situation[curr_pos_y,3]=0forheart_iinheart:ifheart_i.alive_stateandheart_i.pos_x==3andheart_i.pos_y==curr_pos_y:heart_i.alive_state=Falseelif(curr_pos_raw==np.array([3,3,2,0])).all():enemy_die=Trueself.glb_situation[curr_pos_y,2]=0forheart_iinheart:ifheart_i.alive_stateandheart_i.pos_x==2andheart_i.pos_y==curr_pos_y:heart_i.alive_state=Falseelif(curr_pos_raw==np.array([0,2,3,3])).all():enemy_die=Trueself.glb_situation[curr_pos_y,1]=0forheart_iinheart:ifheart_i.alive_stateandheart_i.pos_x==1andheart_i.pos_y==curr_pos_y:heart_i.alive_state=Falseelif(curr_pos_raw==np.array([2,3,3,0])).all():enemy_die=Trueself.glb_situation[curr_pos_y,0]=0forheart_iinheart:ifheart_i.alive_stateandheart_i.pos_x==0andheart_i.pos_y==curr_pos_y:heart_i.alive_state=Falseifenemy_die==True:self.glb_situation=np.zeros([4,4],np.uint8)foriinrange(4):ifheart[i].alive_state:self.glb_situation[heart[i].pos_y,heart[i].pos_x]=heart[i].idforiinrange(4):ifspade[i].alive_state:self.glb_situation[spade[i].pos_y,spade[i].pos_x]=spade[i].idforiinrange(4):print(self.glb_situation[i][:])print('='*12)defcheck_game_over(self):heart_alive_num,spade_alive_num=0,0forheart_iinheart:ifheart_i.alive_state:heart_alive_num+=1forspade_iinspade:ifspade_i.alive_state:spade_alive_num+=1ifheart_alive_num<=1:print('Spadeswin!')GlobalSituation.__init__(self)Pointer.__init__(self)chess_pieces_init()ifspade_alive_num<=1:print('Heartswin!')GlobalSituation.__init__(self)Pointer.__init__(self)chess_pieces_init()heart,spade=[None]*4,[None]*4foriinrange(4):heart[i]=ChessPieces('heart')spade[i]=ChessPieces('spade')defchess_pieces_init():foriinrange(4):heart[i].pos_y,heart[i].pos_x=0,ispade[i].pos_y,spade[i].pos_x=3,iheart[i].alive_state=Truespade[i].alive_state=Truechess_pieces_init()pointer=Pointer()situation=GlobalSituation()defcheck_click_item(c_x,c_y):selected_item=Noneifsituation.spade_turn==None:forheart_iinheart:ifheart_i.alive_stateandheart_i.rect.collidepoint(c_x,c_y):situation.spade_turn=Falseselected_item=heart_iforspade_iinspade:ifspade_i.alive_stateandspade_i.rect.collidepoint(c_x,c_y):situation.spade_turn=Trueselected_item=spade_ielse:ifsituation.spade_turn:forspade_iinspade:ifspade_i.alive_stateandspade_i.rect.collidepoint(c_x,c_y):selected_item=spade_ielse:forheart_iinheart:ifheart_i.alive_stateandheart_i.rect.collidepoint(c_x,c_y):selected_item=heart_ireturnselected_itemdefmove_to_dst_pos(selected_item,c_x,c_y):update_situation=Falseenemy_exist=Falseifselected_item.name=='heart':forspade_iinspade:ifspade_i.rect.collidepoint(c_x,c_y)andspade_i.alive_state:enemy_exist=Trueelifselected_item.name=='spade':forheart_iinheart:ifheart_i.rect.collidepoint(c_x,c_y)andheart_i.alive_state:enemy_exist=Trueifenemy_exist==False:delta_y,delta_x=c_y-selected_item.rect[1],c_x-selected_item.rect[0]if80<=abs(delta_x)<=120andabs(delta_y)<=20:ifdelta_x<0:ifselected_item.pos_x>0:selected_item.pos_x-=1else:ifselected_item.pos_x<3:selected_item.pos_x+=1update_situation=Trueif80<=abs(delta_y)<=120andabs(delta_x)<=20:ifdelta_y<0:ifselected_item.pos_y>0:selected_item.pos_y-=1else:ifselected_item.pos_y<3:selected_item.pos_y+=1update_situation=Truereturnupdate_situationwhileTrue:foreventinpg.event.get():ifevent.type==pg.QUIT:sys.exit()elifevent.type==pg.MOUSEBUTTONDOWN:cursor_x,cursor_y=pg.mouse.get_pos()clicked_item=check_click_item(cursor_x,cursor_y)ifclicked_item!=None:pointer.selecting_item=Truepointer.point_to(clicked_item)else:ifpointer.selecting_item:update_situation_flag=move_to_dst_pos(pointer.pointing_to_item,cursor_x,cursor_y)ifupdate_situation_flag:situation.refresh_situation()situation.check_situation(pointer.pointing_to_item)situation.check_game_over()pointer.selecting_item=Falsescreen.blit(background,(0,0))forheart_iinheart:heart_i.update()forspade_iinspade:spade_i.update()ifpointer.selecting_item:pointer.update()f_clock.tick(fps)pg.display.update()

五、效果展示

怎么使用Python+Pygame实现走四棋儿游戏

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:怎么使用Python+Pygame实现走四棋儿游戏的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:php如何判断数组元素是否都大于0下一篇:

30 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18