源碼分享:
importosimportcfgimportsysimportpygameimportrandomfrommodulesimport*'''游戲初始化'''definitGame():#初始化pygame,設置展示窗口pygame.init()screen=pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption('catchcoins——九歌')#加載必要的游戲素材game_images={}forkey,valueincfg.IMAGE_PATHS.items():ifisinstance(value,list):images=[]foriteminvalue:images.append(pygame.image.load(item))game_images[key]=imageselse:game_images[key]=pygame.image.load(value)game_sounds={}forkey,valueincfg.AUDIO_PATHS.items():ifkey=='bgm':continuegame_sounds[key]=pygame.mixer.Sound(value)#返回初始化數據returnscreen,game_images,game_sounds'''主函數'''defmain():#初始化screen,game_images,game_sounds=initGame()#播放背景音樂pygame.mixer.music.load(cfg.AUDIO_PATHS['bgm'])pygame.mixer.music.play(-1,0.0)#字體加載font=pygame.font.Font(cfg.FONT_PATH,40)#定義herohero=Hero(game_images['hero'],position=(375,520))#定義食物組food_sprites_group=pygame.sprite.Group()generate_food_freq=random.randint(10,20)generate_food_count=0#當前分數/歷史最高分score=0highest_score=0ifnotos.path.exists(cfg.HIGHEST_SCORE_RECORD_FILEPATH)elseint(open(cfg.HIGHEST_SCORE_RECORD_FILEPATH).read())#游戲主循環clock=pygame.time.Clock()whileTrue:#--填充背景screen.fill(0)screen.blit(game_images['background'],(0,0))#--倒計時信息countdown_text='Countdown:'+str((90000-pygame.time.get_ticks())//60000)+":"+str((90000-pygame.time.get_ticks())//1000%60).zfill(2)countdown_text=font.render(countdown_text,True,(0,0,0))countdown_rect=countdown_text.get_rect()countdown_rect.topright=[cfg.SCREENSIZE[0]-30,5]screen.blit(countdown_text,countdown_rect)#--按鍵檢測foreventinpygame.event.get():ifevent.type==pygame.QUIT:pygame.quit()sys.exit()key_pressed=pygame.key.get_pressed()ifkey_pressed[pygame.K_a]orkey_pressed[pygame.K_LEFT]:hero.move(cfg.SCREENSIZE,'left')ifkey_pressed[pygame.K_d]orkey_pressed[pygame.K_RIGHT]:hero.move(cfg.SCREENSIZE,'right')#--隨機生成食物generate_food_count+=1ifgenerate_food_count>generate_food_freq:generate_food_freq=random.randint(10,20)generate_food_count=0food=Food(game_images,random.choice(['gold',]*10+['apple']),cfg.SCREENSIZE)food_sprites_group.add(food)#--更新食物forfoodinfood_sprites_group:iffood.update():food_sprites_group.remove(food)#--碰撞檢測forfoodinfood_sprites_group:ifpygame.sprite.collide_mask(food,hero):game_sounds['get'].play()food_sprites_group.remove(food)score+=food.scoreifscore>highest_score:highest_score=score#--畫herohero.draw(screen)#--畫食物food_sprites_group.draw(screen)#--顯示得分score_text=f'Score:{score},Highest:{highest_score}'score_text=font.render(score_text,True,(0,0,0))score_rect=score_text.get_rect()score_rect.topleft=[5,5]screen.blit(score_text,score_rect)#--判斷游戲是否結束ifpygame.time.get_ticks()>=90000:break#--更新屏幕pygame.display.flip()clock.tick(cfg.FPS)#游戲結束,記錄最高分并顯示游戲結束畫面fp=open(cfg.HIGHEST_SCORE_RECORD_FILEPATH,'w')fp.write(str(highest_score))fp.close()returnshowEndGameInterface(screen,cfg,score,highest_score)'''run'''if__name__=='__main__':whilemain():pass
源碼分享:
importsysimportcfgimportpygamefrommodulesimport*'''定義按鈕'''defButton(screen,position,text,button_size=(200,50)):left,top=positionbwidth,bheight=button_sizepygame.draw.line(screen,(150,150,150),(left,top),(left+bwidth,top),5)pygame.draw.line(screen,(150,150,150),(left,top-2),(left,top+bheight),5)pygame.draw.line(screen,(50,50,50),(left,top+bheight),(left+bwidth,top+bheight),5)pygame.draw.line(screen,(50,50,50),(left+bwidth,top+bheight),(left+bwidth,top),5)pygame.draw.rect(screen,(100,100,100),(left,top,bwidth,bheight))font=pygame.font.Font(cfg.FONTPATH,30)text_render=font.render(text,1,(255,235,205))returnscreen.blit(text_render,(left+50,top+10))'''Function:開始界面Input:--screen:游戲界面Return:--game_mode:1(單人模式)/2(雙人模式)'''defstartInterface(screen):clock=pygame.time.Clock()whileTrue:screen.fill((41,36,33))button_1=Button(screen,(150,175),'1Player')button_2=Button(screen,(150,275),'2Player')foreventinpygame.event.get():ifevent.type==pygame.QUIT:pygame.quit()sys.exit()ifevent.type==pygame.MOUSEBUTTONDOWN:ifbutton_1.collidepoint(pygame.mouse.get_pos()):return1elifbutton_2.collidepoint(pygame.mouse.get_pos()):return2clock.tick(10)pygame.display.update()'''結束界面'''defendInterface(screen,score_left,score_right):clock=pygame.time.Clock()font1=pygame.font.Font(cfg.FONTPATH,30)font2=pygame.font.Font(cfg.FONTPATH,20)msg='Playeronleftwon!'ifscore_left>score_rightelse'Playeronrightwon!'texts=[font1.render(msg,True,cfg.WHITE),font2.render('PressESCAPEtoquit.',True,cfg.WHITE),font2.render('PressENTERtocontinueorplayagain.',True,cfg.WHITE)]positions=[[120,200],[155,270],[80,300]]whileTrue:screen.fill((41,36,33))foreventinpygame.event.get():ifevent.type==pygame.QUIT:pygame.quit()sys.exit()ifevent.type==pygame.KEYDOWN:ifevent.key==pygame.K_RETURN:returnelifevent.key==pygame.K_ESCAPE:sys.exit()pygame.quit()fortext,posinzip(texts,positions):screen.blit(text,pos)clock.tick(10)pygame.display.update()'''運行游戲Demo'''defrunDemo(screen):#加載游戲素材hit_sound=pygame.mixer.Sound(cfg.HITSOUNDPATH)goal_sound=pygame.mixer.Sound(cfg.GOALSOUNDPATH)pygame.mixer.music.load(cfg.BGMPATH)pygame.mixer.music.play(-1,0.0)font=pygame.font.Font(cfg.FONTPATH,50)#開始界面game_mode=startInterface(screen)#游戲主循環#--左邊球拍(ws控制,僅雙人模式時可控制)score_left=0racket_left=Racket(cfg.RACKETPICPATH,'LEFT',cfg)#--右邊球拍(↑↓控制)score_right=0racket_right=Racket(cfg.RACKETPICPATH,'RIGHT',cfg)#--球ball=Ball(cfg.BALLPICPATH,cfg)clock=pygame.time.Clock()whileTrue:foreventinpygame.event.get():ifevent.type==pygame.QUIT:pygame.quit()sys.exit(-1)screen.fill((41,36,33))#玩家操作pressed_keys=pygame.key.get_pressed()ifpressed_keys[pygame.K_UP]:racket_right.move('UP')elifpressed_keys[pygame.K_DOWN]:racket_right.move('DOWN')ifgame_mode==2:ifpressed_keys[pygame.K_w]:racket_left.move('UP')elifpressed_keys[pygame.K_s]:racket_left.move('DOWN')else:racket_left.automove(ball)#球運動scores=ball.move(ball,racket_left,racket_right,hit_sound,goal_sound)score_left+=scores[0]score_right+=scores[1]#顯示#--分隔線pygame.draw.rect(screen,cfg.WHITE,(247,0,6,500))#--球ball.draw(screen)#--拍racket_left.draw(screen)racket_right.draw(screen)#--得分screen.blit(font.render(str(score_left),False,cfg.WHITE),(150,10))screen.blit(font.render(str(score_right),False,cfg.WHITE),(300,10))ifscore_left==11orscore_right==11:returnscore_left,score_rightclock.tick(100)pygame.display.update()'''主函數'''defmain():#初始化pygame.init()pygame.mixer.init()screen=pygame.display.set_mode((cfg.WIDTH,cfg.HEIGHT))pygame.display.set_caption('pingpong——九歌')#開始游戲whileTrue:score_left,score_right=runDemo(screen)endInterface(screen,score_left,score_right)'''run'''if__name__=='__main__':main()
源碼分享:
importsysimportcfgimportpygameimportrandom'''滑雪者類'''classSkierClass(pygame.sprite.Sprite):def__init__(self):pygame.sprite.Sprite.__init__(self)#滑雪者的朝向(-2到2)self.direction=0self.imagepaths=cfg.SKIER_IMAGE_PATHS[:-1]self.image=pygame.image.load(self.imagepaths[self.direction])self.rect=self.image.get_rect()self.rect.center=[320,100]self.speed=[self.direction,6-abs(self.direction)*2]'''改變滑雪者的朝向.負數為向左,正數為向右,0為向前'''defturn(self,num):self.direction+=numself.direction=max(-2,self.direction)self.direction=min(2,self.direction)center=self.rect.centerself.image=pygame.image.load(self.imagepaths[self.direction])self.rect=self.image.get_rect()self.rect.center=centerself.speed=[self.direction,6-abs(self.direction)*2]returnself.speed'''移動滑雪者'''defmove(self):self.rect.centerx+=self.speed[0]self.rect.centerx=max(20,self.rect.centerx)self.rect.centerx=min(620,self.rect.centerx)'''設置為摔倒狀態'''defsetFall(self):self.image=pygame.image.load(cfg.SKIER_IMAGE_PATHS[-1])'''設置為站立狀態'''defsetForward(self):self.direction=0self.image=pygame.image.load(self.imagepaths[self.direction])'''Function:障礙物類Input:img_path:障礙物圖片路徑location:障礙物位置attribute:障礙物類別屬性'''classObstacleClass(pygame.sprite.Sprite):def__init__(self,img_path,location,attribute):pygame.sprite.Sprite.__init__(self)self.img_path=img_pathself.image=pygame.image.load(self.img_path)self.location=locationself.rect=self.image.get_rect()self.rect.center=self.locationself.attribute=attributeself.passed=False'''移動'''defmove(self,num):self.rect.centery=self.location[1]-num'''創建障礙物'''defcreateObstacles(s,e,num=10):obstacles=pygame.sprite.Group()locations=[]foriinrange(num):row=random.randint(s,e)col=random.randint(0,9)location=[col*64+20,row*64+20]iflocationnotinlocations:locations.append(location)attribute=random.choice(list(cfg.OBSTACLE_PATHS.keys()))img_path=cfg.OBSTACLE_PATHS[attribute]obstacle=ObstacleClass(img_path,location,attribute)obstacles.add(obstacle)returnobstacles'''合并障礙物'''defAddObstacles(obstacles0,obstacles1):obstacles=pygame.sprite.Group()forobstacleinobstacles0:obstacles.add(obstacle)forobstacleinobstacles1:obstacles.add(obstacle)returnobstacles'''顯示游戲開始界面'''defShowStartInterface(screen,screensize):screen.fill((255,255,255))tfont=pygame.font.Font(cfg.FONTPATH,screensize[0]//5)cfont=pygame.font.Font(cfg.FONTPATH,screensize[0]//20)title=tfont.render(u'滑雪游戲',True,(255,0,0))content=cfont.render(u'按任意鍵開始游戲',True,(0,0,255))trect=title.get_rect()trect.midtop=(screensize[0]/2,screensize[1]/5)crect=content.get_rect()crect.midtop=(screensize[0]/2,screensize[1]/2)screen.blit(title,trect)screen.blit(content,crect)whileTrue:foreventinpygame.event.get():ifevent.type==pygame.QUIT:pygame.quit()sys.exit()elifevent.type==pygame.KEYDOWN:returnpygame.display.update()'''顯示分數'''defshowScore(screen,score,pos=(10,10)):font=pygame.font.Font(cfg.FONTPATH,30)score_text=font.render("Score:%s"%score,True,(0,0,0))screen.blit(score_text,pos)'''更新當前幀的游戲畫面'''defupdateFrame(screen,obstacles,skier,score):screen.fill((255,255,255))obstacles.draw(screen)screen.blit(skier.image,skier.rect)showScore(screen,score)pygame.display.update()'''主程序'''defmain():#游戲初始化pygame.init()pygame.mixer.init()pygame.mixer.music.load(cfg.BGMPATH)pygame.mixer.music.set_volume(0.4)pygame.mixer.music.play(-1)#設置屏幕screen=pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption('滑雪游戲——九歌')#游戲開始界面ShowStartInterface(screen,cfg.SCREENSIZE)#實例化游戲精靈#--滑雪者skier=SkierClass()#--創建障礙物obstacles0=createObstacles(20,29)obstacles1=createObstacles(10,19)obstaclesflag=0obstacles=AddObstacles(obstacles0,obstacles1)#游戲clockclock=pygame.time.Clock()#記錄滑雪的距離distance=0#記錄當前的分數score=0#記錄當前的速度speed=[0,6]#游戲主循環whileTrue:#--事件捕獲foreventinpygame.event.get():ifevent.type==pygame.QUIT:pygame.quit()sys.exit()ifevent.type==pygame.KEYDOWN:ifevent.key==pygame.K_LEFTorevent.key==pygame.K_a:speed=skier.turn(-1)elifevent.key==pygame.K_RIGHTorevent.key==pygame.K_d:speed=skier.turn(1)#--更新當前游戲幀的數據skier.move()distance+=speed[1]ifdistance>=640andobstaclesflag==0:obstaclesflag=1obstacles0=createObstacles(20,29)obstacles=AddObstacles(obstacles0,obstacles1)ifdistance>=1280andobstaclesflag==1:obstaclesflag=0distance-=1280forobstacleinobstacles0:obstacle.location[1]=obstacle.location[1]-1280obstacles1=createObstacles(10,19)obstacles=AddObstacles(obstacles0,obstacles1)forobstacleinobstacles:obstacle.move(distance)#--碰撞檢測hitted_obstacles=pygame.sprite.spritecollide(skier,obstacles,False)ifhitted_obstacles:ifhitted_obstacles[0].attribute=="tree"andnothitted_obstacles[0].passed:score-=50skier.setFall()updateFrame(screen,obstacles,skier,score)pygame.time.delay(1000)skier.setForward()speed=[0,6]hitted_obstacles[0].passed=Trueelifhitted_obstacles[0].attribute=="flag"andnothitted_obstacles[0].passed:score+=10obstacles.remove(hitted_obstacles[0])#--更新屏幕updateFrame(screen,obstacles,skier,score)clock.tick(cfg.FPS)'''run'''if__name__=='__main__':main();
源碼分享:
importsysimportcfgimportpygamefrommodulesimport*'''游戲界面'''defGamingInterface(num_player,screen):#初始化pygame.mixer.music.load(cfg.SOUNDPATHS['CoolSpaceMusic'])pygame.mixer.music.set_volume(0.4)pygame.mixer.music.play(-1)explosion_sound=pygame.mixer.Sound(cfg.SOUNDPATHS['boom'])fire_sound=pygame.mixer.Sound(cfg.SOUNDPATHS['shot'])font=pygame.font.Font(cfg.FONTPATH,20)#游戲背景圖bg_imgs=[cfg.IMAGEPATHS['bg_big'],cfg.IMAGEPATHS['seamless_space'],cfg.IMAGEPATHS['space3']]bg_move_dis=0bg_1=pygame.image.load(bg_imgs[0]).convert()bg_2=pygame.image.load(bg_imgs[1]).convert()bg_3=pygame.image.load(bg_imgs[2]).convert()#玩家,子彈和小行星精靈組player_group=pygame.sprite.Group()bullet_group=pygame.sprite.Group()asteroid_group=pygame.sprite.Group()#產生小行星的時間間隔asteroid_ticks=90foriinrange(num_player):player_group.add(Ship(i+1,cfg))clock=pygame.time.Clock()#分數score_1,score_2=0,0#游戲主循環whileTrue:foreventinpygame.event.get():ifevent.type==pygame.QUIT:pygame.quit()sys.exit()#--玩家一:↑↓←→控制,j射擊;玩家二:wsad控制,空格射擊pressed_keys=pygame.key.get_pressed()foridx,playerinenumerate(player_group):direction=Noneifidx==0:ifpressed_keys[pygame.K_UP]:direction='up'elifpressed_keys[pygame.K_DOWN]:direction='down'elifpressed_keys[pygame.K_LEFT]:direction='left'elifpressed_keys[pygame.K_RIGHT]:direction='right'ifdirection:player.move(direction)ifpressed_keys[pygame.K_j]:ifplayer.cooling_time==0:fire_sound.play()bullet_group.add(player.shot())player.cooling_time=20elifidx==1:ifpressed_keys[pygame.K_w]:direction='up'elifpressed_keys[pygame.K_s]:direction='down'elifpressed_keys[pygame.K_a]:direction='left'elifpressed_keys[pygame.K_d]:direction='right'ifdirection:player.move(direction)ifpressed_keys[pygame.K_SPACE]:ifplayer.cooling_time==0:fire_sound.play()bullet_group.add(player.shot())player.cooling_time=20ifplayer.cooling_time>0:player.cooling_time-=1if(score_1+score_2)<500:background=bg_1elif(score_1+score_2)<1500:background=bg_2else:background=bg_3#--向下移動背景圖實現飛船向上移動的效果screen.blit(background,(0,-background.get_rect().height+bg_move_dis))screen.blit(background,(0,bg_move_dis))bg_move_dis=(bg_move_dis+2)%background.get_rect().height#--生成小行星ifasteroid_ticks==0:asteroid_ticks=90asteroid_group.add(Asteroid(cfg))else:asteroid_ticks-=1#--畫飛船forplayerinplayer_group:ifpygame.sprite.spritecollide(player,asteroid_group,True,None):player.explode_step=1explosion_sound.play()elifplayer.explode_step>0:ifplayer.explode_step>3:player_group.remove(player)iflen(player_group)==0:returnelse:player.explode(screen)else:player.draw(screen)#--畫子彈forbulletinbullet_group:bullet.move()ifpygame.sprite.spritecollide(bullet,asteroid_group,True,None):bullet_group.remove(bullet)ifbullet.player_idx==1:score_1+=1else:score_2+=1else:bullet.draw(screen)#--畫小行星forasteroidinasteroid_group:asteroid.move()asteroid.rotate()asteroid.draw(screen)#--顯示分數score_1_text='玩家一得分:%s'%score_1score_2_text='玩家二得分:%s'%score_2text_1=font.render(score_1_text,True,(0,0,255))text_2=font.render(score_2_text,True,(255,0,0))screen.blit(text_1,(2,5))screen.blit(text_2,(2,35))#--屏幕刷新pygame.display.update()clock.tick(60)'''主函數'''defmain():pygame.init()pygame.font.init()pygame.mixer.init()screen=pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption('飛機大戰——九歌')num_player=StartInterface(screen,cfg)ifnum_player==1:whileTrue:GamingInterface(num_player=1,screen=screen)EndInterface(screen,cfg)else:whileTrue:GamingInterface(num_player=2,screen=screen)EndInterface(screen,cfg)'''run'''if__name__=='__main__':main()
源碼分享:
importcfgimportsysimportpygameimportrandomfrommodulesimport*'''游戲初始化'''definitGame():pygame.init()pygame.mixer.init()screen=pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption('打地鼠——九歌')returnscreen'''主函數'''defmain():#初始化screen=initGame()#加載背景音樂和其他音效pygame.mixer.music.load(cfg.BGM_PATH)pygame.mixer.music.play(-1)audios={'count_down':pygame.mixer.Sound(cfg.COUNT_DOWN_SOUND_PATH),'hammering':pygame.mixer.Sound(cfg.HAMMERING_SOUND_PATH)}#加載字體font=pygame.font.Font(cfg.FONT_PATH,40)#加載背景圖片bg_img=pygame.image.load(cfg.GAME_BG_IMAGEPATH)#開始界面startInterface(screen,cfg.GAME_BEGIN_IMAGEPATHS)#地鼠改變位置的計時hole_pos=random.choice(cfg.HOLE_POSITIONS)change_hole_event=pygame.USEREVENTpygame.time.set_timer(change_hole_event,800)#地鼠mole=Mole(cfg.MOLE_IMAGEPATHS,hole_pos)#錘子hammer=Hammer(cfg.HAMMER_IMAGEPATHS,(500,250))#時鐘clock=pygame.time.Clock()#分數your_score=0flag=False#初始時間init_time=pygame.time.get_ticks()#游戲主循環whileTrue:#--游戲時間為60stime_remain=round((61000-(pygame.time.get_ticks()-init_time))/1000.)#--游戲時間減少,地鼠變位置速度變快iftime_remain==40andnotflag:hole_pos=random.choice(cfg.HOLE_POSITIONS)mole.reset()mole.setPosition(hole_pos)pygame.time.set_timer(change_hole_event,650)flag=Trueeliftime_remain==20andflag:hole_pos=random.choice(cfg.HOLE_POSITIONS)mole.reset()mole.setPosition(hole_pos)pygame.time.set_timer(change_hole_event,500)flag=False#--倒計時音效iftime_remain==10:audios['count_down'].play()#--游戲結束iftime_remain<0:breakcount_down_text=font.render('Time:'+str(time_remain),True,cfg.WHITE)#--按鍵檢測foreventinpygame.event.get():ifevent.type==pygame.QUIT:pygame.quit()sys.exit()elifevent.type==pygame.MOUsemOTION:hammer.setPosition(pygame.mouse.get_pos())elifevent.type==pygame.MOUSEBUTTONDOWN:ifevent.button==1:hammer.setHammering()elifevent.type==change_hole_event:hole_pos=random.choice(cfg.HOLE_POSITIONS)mole.reset()mole.setPosition(hole_pos)#--碰撞檢測ifhammer.is_hammeringandnotmole.is_hammer:is_hammer=pygame.sprite.collide_mask(hammer,mole)ifis_hammer:audios['hammering'].play()mole.setBeHammered()your_score+=10#--分數your_score_text=font.render('Score:'+str(your_score),True,cfg.BROWN)#--綁定必要的游戲元素到屏幕(注意順序)screen.blit(bg_img,(0,0))screen.blit(count_down_text,(875,8))screen.blit(your_score_text,(800,430))mole.draw(screen)hammer.draw(screen)#--更新pygame.display.flip()clock.tick(60)#讀取最佳分數(try塊避免第一次游戲無.rec文件)try:best_score=int(open(cfg.RECORD_PATH).read())except:best_score=0#若當前分數大于最佳分數則更新最佳分數ifyour_score>best_score:f=open(cfg.RECORD_PATH,'w')f.write(str(your_score))f.close()#結束界面score_info={'your_score':your_score,'best_score':best_score}is_restart=endInterface(screen,cfg.GAME_END_IMAGEPATH,cfg.GAME_AGAIN_IMAGEPATHS,score_info,cfg.FONT_PATH,[cfg.WHITE,cfg.RED],cfg.SCREENSIZE)returnis_restart'''run'''if__name__=='__main__':whileTrue:is_restart=main()ifnotis_restart:break
玩法:上下控制起跳躲避
源碼分享:
importcfgimportsysimportrandomimportpygamefrommodulesimport*'''main'''defmain(highest_score):#游戲初始化pygame.init()screen=pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption('九歌')#導入所有聲音文件sounds={}forkey,valueincfg.AUDIO_PATHS.items():sounds[key]=pygame.mixer.Sound(value)#游戲開始界面GameStartInterface(screen,sounds,cfg)#定義一些游戲中必要的元素和變量score=0score_board=Scoreboard(cfg.IMAGE_PATHS['numbers'],position=(534,15),bg_color=cfg.BACKGROUND_COLOR)highest_score=highest_scorehighest_score_board=Scoreboard(cfg.IMAGE_PATHS['numbers'],position=(435,15),bg_color=cfg.BACKGROUND_COLOR,is_highest=True)dino=Dinosaur(cfg.IMAGE_PATHS['dino'])ground=Ground(cfg.IMAGE_PATHS['ground'],position=(0,cfg.SCREENSIZE[1]))cloud_sprites_group=pygame.sprite.Group()cactus_sprites_group=pygame.sprite.Group()ptera_sprites_group=pygame.sprite.Group()add_obstacle_timer=0score_timer=0#游戲主循環clock=pygame.time.Clock()whileTrue:foreventinpygame.event.get():ifevent.type==pygame.QUIT:pygame.quit()sys.exit()elifevent.type==pygame.KEYDOWN:ifevent.key==pygame.K_SPACEorevent.key==pygame.K_UP:dino.jump(sounds)elifevent.key==pygame.K_DOWN:dino.duck()elifevent.type==pygame.KEYUPandevent.key==pygame.K_DOWN:dino.unduck()screen.fill(cfg.BACKGROUND_COLOR)#--隨機添加云iflen(cloud_sprites_group)<5andrandom.randrange(0,300)==10:cloud_sprites_group.add(Cloud(cfg.IMAGE_PATHS['cloud'],position=(cfg.SCREENSIZE[0],random.randrange(30,75))))#--隨機添加仙人掌/飛龍add_obstacle_timer+=1ifadd_obstacle_timer>random.randrange(50,150):add_obstacle_timer=0random_value=random.randrange(0,10)ifrandom_value>=5andrandom_value<=7:cactus_sprites_group.add(Cactus(cfg.IMAGE_PATHS['cacti']))else:position_ys=[cfg.SCREENSIZE[1]*0.82,cfg.SCREENSIZE[1]*0.75,cfg.SCREENSIZE[1]*0.60,cfg.SCREENSIZE[1]*0.20]ptera_sprites_group.add(Ptera(cfg.IMAGE_PATHS['ptera'],position=(600,random.choice(position_ys))))#--更新游戲元素dino.update()ground.update()cloud_sprites_group.update()cactus_sprites_group.update()ptera_sprites_group.update()score_timer+=1ifscore_timer>(cfg.FPS//12):score_timer=0score+=1score=min(score,99999)ifscore>highest_score:highest_score=scoreifscore%100==0:sounds['point'].play()ifscore%1000==0:ground.speed-=1foritemincloud_sprites_group:item.speed-=1foritemincactus_sprites_group:item.speed-=1foriteminptera_sprites_group:item.speed-=1#--碰撞檢測foritemincactus_sprites_group:ifpygame.sprite.collide_mask(dino,item):dino.die(sounds)foriteminptera_sprites_group:ifpygame.sprite.collide_mask(dino,item):dino.die(sounds)#--將游戲元素畫到屏幕上dino.draw(screen)ground.draw(screen)cloud_sprites_group.draw(screen)cactus_sprites_group.draw(screen)ptera_sprites_group.draw(screen)score_board.set(score)highest_score_board.set(highest_score)score_board.draw(screen)highest_score_board.draw(screen)#--更新屏幕pygame.display.update()clock.tick(cfg.FPS)#--游戲是否結束ifdino.is_dead:break#游戲結束界面returnGameEndInterface(screen,cfg),highest_score'''run'''if__name__=='__main__':highest_score=0whileTrue:flag,highest_score=main(highest_score)ifnotflag:break
玩法:三個相連就能消除
源碼分享:
importosimportsysimportcfgimportpygamefrommodulesimport*'''游戲主程序'''defmain():pygame.init()screen=pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption('Gemgem——九歌')#加載背景音樂pygame.mixer.init()pygame.mixer.music.load(os.path.join(cfg.ROOTDIR,"resources/audios/bg.mp3"))pygame.mixer.music.set_volume(0.6)pygame.mixer.music.play(-1)#加載音效sounds={}sounds['mismatch']=pygame.mixer.Sound(os.path.join(cfg.ROOTDIR,'resources/audios/badswap.wav'))sounds['match']=[]foriinrange(6):sounds['match'].append(pygame.mixer.Sound(os.path.join(cfg.ROOTDIR,'resources/audios/match%s.wav'%i)))#加載字體font=pygame.font.Font(os.path.join(cfg.ROOTDIR,'resources/font/font.TTF'),25)#圖片加載gem_imgs=[]foriinrange(1,8):gem_imgs.append(os.path.join(cfg.ROOTDIR,'resources/images/gem%s.png'%i))#主循環game=gemGame(screen,sounds,font,gem_imgs,cfg)whileTrue:score=game.start()flag=False#一輪游戲結束后玩家選擇重玩或者退出whileTrue:foreventinpygame.event.get():ifevent.type==pygame.QUITor(event.type==pygame.KEYUPandevent.key==pygame.K_ESCAPE):pygame.quit()sys.exit()elifevent.type==pygame.KEYUPandevent.key==pygame.K_r:flag=Trueifflag:breakscreen.fill((135,206,235))text0='Finalscore:%s'%scoretext1='Press<R>torestartthegame.'text2='Press<Esc>toquitthegame.'y=150foridx,textinenumerate([text0,text1,text2]):text_render=font.render(text,1,(85,65,0))rect=text_render.get_rect()ifidx==0:rect.left,rect.top=(212,y)elifidx==1:rect.left,rect.top=(122.5,y)else:rect.left,rect.top=(126.5,y)y+=100screen.blit(text_render,rect)pygame.display.update()game.reset()'''run'''if__name__=='__main__':main()
玩法:童年經典,普通模式沒啥意思,小時候我們都是玩加速的。
源碼分享:
importosimportsysimportrandomfrommodulesimport*fromPyQt5.QtGuiimport*fromPyQt5.QtCoreimport*fromPyQt5.QtWidgetsimport*'''定義俄羅斯方塊游戲類'''classTetrisGame(QMainWindow):def__init__(self,parent=None):super(TetrisGame,self).__init__(parent)#是否暫停ingself.is_paused=False#是否開始ingself.is_started=Falseself.initUI()'''界面初始化'''definitUI(self):#iconself.setWindowIcon(QIcon(os.path.join(os.getcwd(),'resources/icon.jpg')))#塊大小self.grid_size=22#游戲幀率self.fps=200self.timer=QBasicTimer()#焦點self.setFocusPolicy(Qt.StrongFocus)#水平布局layout_horizontal=QHBoxLayout()self.inner_board=InnerBoard()self.external_board=ExternalBoard(self,self.grid_size,self.inner_board)layout_horizontal.addWidget(self.external_board)self.side_panel=SidePanel(self,self.grid_size,self.inner_board)layout_horizontal.addWidget(self.side_panel)self.status_bar=self.statusBar()self.external_board.score_signal[str].connect(self.status_bar.showMessage)self.start()self.center()self.setWindowTitle('Tetris——九歌')self.show()self.setFixedSize(self.external_board.width()+self.side_panel.width(),self.side_panel.height()+self.status_bar.height())'''游戲界面移動到屏幕中間'''defcenter(self):screen=QDesktopWidget().screenGeometry()size=self.geometry()self.move((screen.width()-size.width())//2,(screen.height()-size.height())//2)'''更新界面'''defupdateWindow(self):self.external_board.updateData()self.side_panel.updateData()self.update()'''開始'''defstart(self):ifself.is_started:returnself.is_started=Trueself.inner_board.createNewTetris()self.timer.start(self.fps,self)'''暫停/不暫停'''defpause(self):ifnotself.is_started:returnself.is_paused=notself.is_pausedifself.is_paused:self.timer.stop()self.external_board.score_signal.emit('Paused')else:self.timer.start(self.fps,self)self.updateWindow()'''計時器事件'''deftimerEvent(self,event):ifevent.timerId()==self.timer.timerId():removed_lines=self.inner_board.moveDown()self.external_board.score+=removed_linesself.updateWindow()else:super(TetrisGame,self).timerEvent(event)'''按鍵事件'''defkeyPressEvent(self,event):ifnotself.is_startedorself.inner_board.current_tetris==tetrisShape().shape_empty:super(TetrisGame,self).keyPressEvent(event)returnkey=event.key()#P鍵暫停ifkey==Qt.Key_P:self.pause()returnifself.is_paused:return#向左elifkey==Qt.Key_Left:self.inner_board.moveLeft()#向右elifkey==Qt.Key_Right:self.inner_board.moveRight()#旋轉elifkey==Qt.Key_Up:self.inner_board.rotateAnticlockwise()#快速墜落elifkey==Qt.Key_Space:self.external_board.score+=self.inner_board.dropDown()else:super(TetrisGame,self).keyPressEvent(event)self.updateWindow()'''run'''if__name__=='__main__':app=QApplication([])tetris=TetrisGame()sys.exit(app.exec_())
玩法:童年經典,普通魔術也沒啥意思,小時候玩的也是加速的。
源碼分享:
importcfgimportsysimportpygamefrommodulesimport*'''主函數'''defmain(cfg):#游戲初始化pygame.init()screen=pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption('GreedySnake——九歌')clock=pygame.time.Clock()#播放背景音樂pygame.mixer.music.load(cfg.BGMPATH)pygame.mixer.music.play(-1)#游戲主循環snake=Snake(cfg)apple=Apple(cfg,snake.coords)score=0whileTrue:screen.fill(cfg.BLACK)#--按鍵檢測foreventinpygame.event.get():ifevent.type==pygame.QUIT:pygame.quit()sys.exit()elifevent.type==pygame.KEYDOWN:ifevent.keyin[pygame.K_UP,pygame.K_DOWN,pygame.K_LEFT,pygame.K_RIGHT]:snake.setDirection({pygame.K_UP:'up',pygame.K_DOWN:'down',pygame.K_LEFT:'left',pygame.K_RIGHT:'right'}[event.key])#--更新貪吃蛇和食物ifsnake.update(apple):apple=Apple(cfg,snake.coords)score+=1#--判斷游戲是否結束ifsnake.isgameover:break#--顯示游戲里必要的元素drawGameGrid(cfg,screen)snake.draw(screen)apple.draw(screen)showScore(cfg,score,screen)#--屏幕更新pygame.display.update()clock.tick(cfg.FPS)returnendInterface(screen,cfg)'''run'''if__name__=='__main__':whileTrue:ifnotmain(cfg):break
玩法:通過加減乘除操作,小學生都沒問題的。
源碼分享:
importosimportsysimportpygamefromcfgimport*frommodulesimport*fromfractionsimportFraction'''檢查控件是否被點擊'''defcheckClicked(group,mouse_pos,group_type='NUMBER'):selected=[]#數字卡片/運算符卡片ifgroup_type==GROUPTYPES[0]orgroup_type==GROUPTYPES[1]:max_selected=2ifgroup_type==GROUPTYPES[0]else1num_selected=0foreachingroup:num_selected+=int(each.is_selected)foreachingroup:ifeach.rect.collidepoint(mouse_pos):ifeach.is_selected:each.is_selected=noteach.is_selectednum_selected-=1each.select_order=Noneelse:ifnum_selected<max_selected:each.is_selected=noteach.is_selectednum_selected+=1each.select_order=str(num_selected)ifeach.is_selected:selected.append(each.attribute)#按鈕卡片elifgroup_type==GROUPTYPES[2]:foreachingroup:ifeach.rect.collidepoint(mouse_pos):each.is_selected=Trueselected.append(each.attribute)#拋出異常else:raiseValueError('checkClicked.group_typeunsupport%s,expect%s,%sor%s...'%(group_type,*GROUPTYPES))returnselected'''獲取數字精靈組'''defgetNumberSpritesGroup(numbers):number_sprites_group=pygame.sprite.Group()foridx,numberinenumerate(numbers):args=(*NUMBERCARD_POSITIONS[idx],str(number),NUMBERFONT,NUMBERFONT_COLORS,NUMBERCARD_COLORS,str(number))number_sprites_group.add(Card(*args))returnnumber_sprites_group'''獲取運算符精靈組'''defgetOperatorSpritesGroup(operators):operator_sprites_group=pygame.sprite.Group()foridx,operatorinenumerate(operators):args=(*OPERATORCARD_POSITIONS[idx],str(operator),OPERATORFONT,OPREATORFONT_COLORS,OPERATORCARD_COLORS,str(operator))operator_sprites_group.add(Card(*args))returnoperator_sprites_group'''獲取按鈕精靈組'''defgetButtonSpritesGroup(buttons):button_sprites_group=pygame.sprite.Group()foridx,buttoninenumerate(buttons):args=(*BUTTONCARD_POSITIONS[idx],str(button),BUTTONFONT,BUTTONFONT_COLORS,BUTTONCARD_COLORS,str(button))button_sprites_group.add(Button(*args))returnbutton_sprites_group'''計算'''defcalculate(number1,number2,operator):operator_map={'+':'+','-':'-','×':'*','÷':'/'}try:result=str(eval(number1+operator_map[operator]+number2))returnresultif'.'notinresultelsestr(Fraction(number1+operator_map[operator]+number2))except:returnNone'''在屏幕上顯示信息'''defshowInfo(text,screen):rect=pygame.Rect(200,180,400,200)pygame.draw.rect(screen,PAPAYAWHIP,rect)font=pygame.font.Font(FONTPATH,40)text_render=font.render(text,True,BLACK)font_size=font.size(text)screen.blit(text_render,(rect.x+(rect.width-font_size[0])/2,rect.y+(rect.height-font_size[1])/2))'''主函數'''defmain():#初始化,導入必要的游戲素材pygame.init()pygame.mixer.init()screen=pygame.display.set_mode(SCREENSIZE)pygame.display.set_caption('24point——九歌')win_sound=pygame.mixer.Sound(AUDIOWINPATH)lose_sound=pygame.mixer.Sound(AUDIOLOSEPATH)warn_sound=pygame.mixer.Sound(AUDIOWARNPATH)pygame.mixer.music.load(BGMPATH)pygame.mixer.music.play(-1,0.0)#24點游戲生成器game24_gen=game24Generator()game24_gen.generate()#精靈組#--數字number_sprites_group=getNumberSpritesGroup(game24_gen.numbers_now)#--運算符operator_sprites_group=getOperatorSpritesGroup(OPREATORS)#--按鈕button_sprites_group=getButtonSpritesGroup(BUTTONS)#游戲主循環clock=pygame.time.Clock()selected_numbers=[]selected_operators=[]selected_buttons=[]is_win=FalsewhileTrue:foreventinpygame.event.get():ifevent.type==pygame.QUIT:pygame.quit()sys.exit(-1)elifevent.type==pygame.MOUSEBUTTONUP:mouse_pos=pygame.mouse.get_pos()selected_numbers=checkClicked(number_sprites_group,mouse_pos,'NUMBER')selected_operators=checkClicked(operator_sprites_group,mouse_pos,'OPREATOR')selected_buttons=checkClicked(button_sprites_group,mouse_pos,'BUTTON')screen.fill(AZURE)#更新數字iflen(selected_numbers)==2andlen(selected_operators)==1:noselected_numbers=[]foreachinnumber_sprites_group:ifeach.is_selected:ifeach.select_order=='1':selected_number1=each.attributeelifeach.select_order=='2':selected_number2=each.attributeelse:raiseValueError('Unknowselect_order%s,expect1or2...'%each.select_order)else:noselected_numbers.append(each.attribute)each.is_selected=Falseforeachinoperator_sprites_group:each.is_selected=Falseresult=calculate(selected_number1,selected_number2,*selected_operators)ifresultisnotNone:game24_gen.numbers_now=noselected_numbers+[result]is_win=game24_gen.check()ifis_win:win_sound.play()ifnotis_winandlen(game24_gen.numbers_now)==1:lose_sound.play()else:warn_sound.play()selected_numbers=[]selected_operators=[]number_sprites_group=getNumberSpritesGroup(game24_gen.numbers_now)#精靈都畫到screen上foreachinnumber_sprites_group:each.draw(screen,pygame.mouse.get_pos())foreachinoperator_sprites_group:each.draw(screen,pygame.mouse.get_pos())foreachinbutton_sprites_group:ifselected_buttonsandselected_buttons[0]in['RESET','NEXT']:is_win=Falseifselected_buttonsandeach.attribute==selected_buttons[0]:each.is_selected=Falsenumber_sprites_group=each.do(game24_gen,getNumberSpritesGroup,number_sprites_group,button_sprites_group)selected_buttons=[]each.draw(screen,pygame.mouse.get_pos())#游戲勝利ifis_win:showInfo('Congratulations',screen)#游戲失敗ifnotis_winandlen(game24_gen.numbers_now)==1:showInfo('GameOver',screen)pygame.display.flip()clock.tick(30)'''run'''if__name__=='__main__':main()
玩法:也是小時候的經典游戲,控制左右就行,到后面才有一點點難度。
源碼分享:
importcfgfrommodulesimportbreakoutClone'''主函數'''defmain():game=breakoutClone(cfg)game.run()'''run'''if__name__=='__main__':main()
玩法:這讓我想起了魂斗羅那第幾關的boss,有點類似,不過魂斗羅那個難度肯定高點。
源碼分享:
importosimportsysimportcfgimportrandomimportpygamefrommodulesimport*'''開始游戲'''defstartGame(screen):clock=pygame.time.Clock()#加載字體font=pygame.font.SysFont('arial',18)ifnotos.path.isfile('score'):f=open('score','w')f.write('0')f.close()withopen('score','r')asf:highest_score=int(f.read().strip())#敵方enemies_group=pygame.sprite.Group()foriinrange(55):ifi<11:enemy=enemySprite('small',i,cfg.WHITE,cfg.WHITE)elifi<33:enemy=enemySprite('medium',i,cfg.WHITE,cfg.WHITE)else:enemy=enemySprite('large',i,cfg.WHITE,cfg.WHITE)enemy.rect.x=85+(i%11)*50enemy.rect.y=120+(i//11)*45enemies_group.add(enemy)boomed_enemies_group=pygame.sprite.Group()en_bullets_group=pygame.sprite.Group()ufo=ufoSprite(color=cfg.RED)#我方myaircraft=aircraftSprite(color=cfg.GREEN,bullet_color=cfg.WHITE)my_bullets_group=pygame.sprite.Group()#用于控制敵方位置更新#--移動一行enemy_move_count=24enemy_move_interval=24enemy_move_flag=False#--改變移動方向(改變方向的同時集體下降一次)enemy_change_direction_count=0enemy_change_direction_interval=60enemy_need_down=Falseenemy_move_right=Trueenemy_need_move_row=6enemy_max_row=5#用于控制敵方發射子彈enemy_shot_interval=100enemy_shot_count=0enemy_shot_flag=False#游戲進行中running=Trueis_win=False#主循環whilerunning:screen.fill(cfg.BLACK)foreventinpygame.event.get():#--點右上角的X或者按Esc鍵退出游戲ifevent.type==pygame.QUIT:pygame.quit()sys.exit()ifevent.type==pygame.KEYDOWN:ifevent.key==pygame.K_ESCAPE:pygame.quit()sys.exit()#--射擊ifevent.type==pygame.MOUSEBUTTONDOWN:my_bullet=myaircraft.shot()ifmy_bullet:my_bullets_group.add(my_bullet)#--我方子彈與敵方/UFO碰撞檢測forenemyinenemies_group:ifpygame.sprite.spritecollide(enemy,my_bullets_group,True,None):boomed_enemies_group.add(enemy)enemies_group.remove(enemy)myaircraft.score+=enemy.rewardifpygame.sprite.spritecollide(ufo,my_bullets_group,True,None):ufo.is_dead=Truemyaircraft.score+=ufo.reward#--更新并畫敵方#----敵方子彈enemy_shot_count+=1ifenemy_shot_count>enemy_shot_interval:enemy_shot_flag=Trueenemies_survive_list=[enemy.numberforenemyinenemies_group]shot_number=random.choice(enemies_survive_list)enemy_shot_count=0#----敵方移動enemy_move_count+=1ifenemy_move_count>enemy_move_interval:enemy_move_count=0enemy_move_flag=Trueenemy_need_move_row-=1ifenemy_need_move_row==0:enemy_need_move_row=enemy_max_rowenemy_change_direction_count+=1ifenemy_change_direction_count>enemy_change_direction_interval:enemy_change_direction_count=1enemy_move_right=notenemy_move_rightenemy_need_down=True#----每次下降提高移動和射擊速度enemy_move_interval=max(15,enemy_move_interval-3)enemy_shot_interval=max(50,enemy_move_interval-10)#----遍歷更新forenemyinenemies_group:ifenemy_shot_flag:ifenemy.number==shot_number:en_bullet=enemy.shot()en_bullets_group.add(en_bullet)ifenemy_move_flag:ifenemy.numberinrange((enemy_need_move_row-1)*11,enemy_need_move_row*11):ifenemy_move_right:enemy.update('right',cfg.SCREENSIZE[1])else:enemy.update('left',cfg.SCREENSIZE[1])else:enemy.update(None,cfg.SCREENSIZE[1])ifenemy_need_down:ifenemy.update('down',cfg.SCREENSIZE[1]):running=Falseis_win=Falseenemy.change_count-=1enemy.draw(screen)enemy_move_flag=Falseenemy_need_down=Falseenemy_shot_flag=False#----敵方爆炸特效forboomed_enemyinboomed_enemies_group:ifboomed_enemy.boom(screen):boomed_enemies_group.remove(boomed_enemy)delboomed_enemy#--敵方子彈與我方飛船碰撞檢測ifnotmyaircraft.one_dead:ifpygame.sprite.spritecollide(myaircraft,en_bullets_group,True,None):myaircraft.one_dead=Trueifmyaircraft.one_dead:ifmyaircraft.boom(screen):myaircraft.resetBoom()myaircraft.num_life-=1ifmyaircraft.num_life<1:running=Falseis_win=Falseelse:#----更新飛船myaircraft.update(cfg.SCREENSIZE[0])#----畫飛船myaircraft.draw(screen)if(notufo.has_boomed)and(ufo.is_dead):ifufo.boom(screen):ufo.has_boomed=Trueelse:#----更新UFOufo.update(cfg.SCREENSIZE[0])#----畫UFOufo.draw(screen)#--畫我方飛船子彈forbulletinmy_bullets_group:ifbullet.update():my_bullets_group.remove(bullet)delbulletelse:bullet.draw(screen)#--畫敵方子彈forbulletinen_bullets_group:ifbullet.update(cfg.SCREENSIZE[1]):en_bullets_group.remove(bullet)delbulletelse:bullet.draw(screen)ifmyaircraft.score>highest_score:highest_score=myaircraft.score#--得分每增加2000我方飛船增加一條生命if(myaircraft.score%2000==0)and(myaircraft.score>0)and(myaircraft.score!=myaircraft.old_score):myaircraft.old_score=myaircraft.scoremyaircraft.num_life=min(myaircraft.num_life+1,myaircraft.max_num_life)#--敵人都死光了的話就勝利了iflen(enemies_group)<1:is_win=Truerunning=False#--顯示文字#----當前得分showText(screen,'SCORE:',cfg.WHITE,font,200,8)showText(screen,str(myaircraft.score),cfg.WHITE,font,200,24)#----敵人數量showText(screen,'ENEMY:',cfg.WHITE,font,370,8)showText(screen,str(len(enemies_group)),cfg.WHITE,font,370,24)#----歷史最高分showText(screen,'HIGHEST:',cfg.WHITE,font,540,8)showText(screen,str(highest_score),cfg.WHITE,font,540,24)#----FPSshowText(screen,'FPS:'+str(int(clock.get_fps())),cfg.RED,font,8,8)#--顯示剩余生命值showLife(screen,myaircraft.num_life,cfg.GREEN)pygame.display.update()clock.tick(cfg.FPS)withopen('score','w')asf:f.write(str(highest_score))returnis_win'''主函數'''defmain():#初始化pygame.init()pygame.display.set_caption('外星人入侵——九歌')screen=pygame.display.set_mode(cfg.SCREENSIZE)pygame.mixer.init()pygame.mixer.music.load(cfg.BGMPATH)pygame.mixer.music.set_volume(0.4)pygame.mixer.music.play(-1)whileTrue:is_win=startGame(screen)endInterface(screen,cfg.BLACK,is_win)'''run'''if__name__=='__main__':main()
玩法:我打賭大家在課堂上肯定玩過這個,想想當年和同桌玩這個廢了好幾本本子。
源碼分享
fromtkinterimport*importtkinter.messageboxasmsgroot=Tk()root.title('TIC-TAC-TOE---ProjectGurukul')#labelsLabel(root,text="player1:X",font="times15").grid(row=0,column=1)Label(root,text="player2:O",font="times15").grid(row=0,column=2)digits=[1,2,3,4,5,6,7,8,9]#forplayer1sign=Xandforplayer2sign=Ymark=''#countingtheno.ofclickcount=0panels=["panel"]*10defwin(panels,sign):return((panels[1]==panels[2]==panels[3]==sign)or(panels[1]==panels[4]==panels[7]==sign)or(panels[1]==panels[5]==panels[9]==sign)or(panels[2]==panels[5]==panels[8]==sign)or(panels[3]==panels[6]==panels[9]==sign)or(panels[3]==panels[5]==panels[7]==sign)or(panels[4]==panels[5]==panels[6]==sign)or(panels[7]==panels[8]==panels[9]==sign))defchecker(digit):globalcount,mark,digits#Checkwhichbuttonclickedifdigit==1anddigitindigits:digits.remove(digit)##player1willplayifthevalueofcountisevenandforoddplayer2willplayifcount%2==0:mark='X'panels[digit]=markelifcount%2!=0:mark='O'panels[digit]=markbutton1.config(text=mark)count=count+1sign=markif(win(panels,sign)andsign=='X'):msg.showinfo("Result","Player1wins")root.destroy()elif(win(panels,sign)andsign=='O'):msg.showinfo("Result","Player2wins")root.destroy()ifdigit==2anddigitindigits:digits.remove(digit)ifcount%2==0:mark='X'panels[digit]=markelifcount%2!=0:mark='O'panels[digit]=markbutton2.config(text=mark)count=count+1sign=markif(win(panels,sign)andsign=='X'):msg.showinfo("Result","Player1wins")root.destroy()elif(win(panels,sign)andsign=='O'):msg.showinfo("Result","Player2wins")root.destroy()ifdigit==3anddigitindigits:digits.remove(digit)ifcount%2==0:mark='X'panels[digit]=markelifcount%2!=0:mark='O'panels[digit]=markbutton3.config(text=mark)count=count+1sign=markif(win(panels,sign)andsign=='X'):msg.showinfo("Result","Player1wins")root.destroy()elif(win(panels,sign)andsign=='O'):msg.showinfo("Result","Player2wins")root.destroy()ifdigit==4anddigitindigits:digits.remove(digit)ifcount%2==0:mark='X'panels[digit]=markelifcount%2!=0:mark='O'panels[digit]=markbutton4.config(text=mark)count=count+1sign=markif(win(panels,sign)andsign=='X'):msg.showinfo("Result","Player1wins")root.destroy()elif(win(panels,sign)andsign=='O'):msg.showinfo("Result","Player2wins")root.destroy()ifdigit==5anddigitindigits:digits.remove(digit)ifcount%2==0:mark='X'panels[digit]=markelifcount%2!=0:mark='O'panels[digit]=markbutton5.config(text=mark)count=count+1sign=markif(win(panels,sign)andsign=='X'):msg.showinfo("Result","Player1wins")root.destroy()elif(win(panels,sign)andsign=='O'):msg.showinfo("Result","Player2wins")root.destroy()ifdigit==6anddigitindigits:digits.remove(digit)ifcount%2==0:mark='X'panels[digit]=markelifcount%2!=0:mark='O'panels[digit]=markbutton6.config(text=mark)count=count+1sign=markif(win(panels,sign)andsign=='X'):msg.showinfo("Result","Player1wins")root.destroy()elif(win(panels,sign)andsign=='O'):msg.showinfo("Result","Player2wins")root.destroy()ifdigit==7anddigitindigits:digits.remove(digit)ifcount%2==0:mark='X'panels[digit]=markelifcount%2!=0:mark='O'panels[digit]=markbutton7.config(text=mark)count=count+1sign=markif(win(panels,sign)andsign=='X'):msg.showinfo("Result","Player1wins")root.destroy()elif(win(panels,sign)andsign=='O'):msg.showinfo("Result","Player2wins")root.destroy()ifdigit==8anddigitindigits:digits.remove(digit)ifcount%2==0:mark='X'panels[digit]=markelifcount%2!=0:mark='O'panels[digit]=markbutton8.config(text=mark)count=count+1sign=markif(win(panels,sign)andsign=='X'):msg.showinfo("Result","Player1wins")root.destroy()elif(win(panels,sign)andsign=='O'):msg.showinfo("Result","Player2wins")root.destroy()ifdigit==9anddigitindigits:digits.remove(digit)ifcount%2==0:mark='X'panels[digit]=markelifcount%2!=0:mark='O'panels[digit]=markbutton9.config(text=mark)count=count+1sign=markif(win(panels,sign)andsign=='X'):msg.showinfo("Result","Player1wins")root.destroy()elif(win(panels,sign)andsign=='O'):msg.showinfo("Result","Player2wins")root.destroy()###ifcountisgreaterthen8thenthematchhasbeentiedif(count>8andwin(panels,'X')==Falseandwin(panels,'O')==False):msg.showinfo("Result","MatchTied")root.destroy()####definebuttonsbutton1=Button(root,width=15,font=('Times16bold'),height=7,command=lambda:checker(1))button1.grid(row=1,column=1)button2=Button(root,width=15,height=7,font=('Times16bold'),command=lambda:checker(2))button2.grid(row=1,column=2)button3=Button(root,width=15,height=7,font=('Times16bold'),command=lambda:checker(3))button3.grid(row=1,column=3)button4=Button(root,width=15,height=7,font=('Times16bold'),command=lambda:checker(4))button4.grid(row=2,column=1)button5=Button(root,width=15,height=7,font=('Times16bold'),command=lambda:checker(5))button5.grid(row=2,column=2)button6=Button(root,width=15,height=7,font=('Times16bold'),command=lambda:checker(6))button6.grid(row=2,column=3)button7=Button(root,width=15,height=7,font=('Times16bold'),command=lambda:checker(7))button7.grid(row=3,column=1)button8=Button(root,width=15,height=7,font=('Times16bold'),command=lambda:checker(8))button8.grid(row=3,column=2)button9=Button(root,width=15,height=7,font=('Times16bold'),command=lambda:checker(9))button9.grid(row=3,column=3)root.mainloop()
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
傳房產證下崗作廢是真的嗎?對于傳言,當地房管和土地部門已經表示,發放的房產證仍然有效。不動產登記按照“不變”的原則進行,舊證逐步被新證取代。房地產權利變更或轉讓的,發給新的產權人不動產證書;如果不變更或轉讓物權,舊證仍然合法有效,其效力與物權憑證相同,各種手續仍然可以辦理?!恫粍赢a權證書》是指國土資源部制定的房地產登記證,2015年3月1日正式實施,國土資源部制定的房地產登...
(資料圖)近日,寶尊電商有限公司(納斯達克:BZUN及港交所:9991)(以下簡稱“寶尊”)正式宣布,將以全現金交易方式收購Gap大中華區業務。目前該協議已完成簽署,股權交易對價為4000萬美元,根據收購流程及相關法律法規,交易程序將待相關部門審批后正式完成。據虎嗅消息,GAP在亞洲經歷著困境。2017年開始,GAP集團亞洲業務占比持續下滑;2020年,旗下品牌Old Na...
社會保險基金是什么意思?是指為了保障保險對象的社會保險待遇,按照國家法律、法規,由繳費單位和繳費個人分別按繳費基數的一定比例繳納以及通過其他合法方式籌集的專項資金。社會保險基金是國家為舉辦社會保險事業而籌集的,用于支付勞動者因暫時或永久喪失勞動能力或勞動機會時所享受的保險金和津貼的資金。社會保險基金按照保險類型確定資金來源,逐步實行社會統籌。用人單位和勞動者必須依法參加社會保險,繳納社會保險費。社...