国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

一口氣用Python寫(xiě)了13個(gè)小游戲(附源碼)

這篇具有很好參考價(jià)值的文章主要介紹了一口氣用Python寫(xiě)了13個(gè)小游戲(附源碼)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

今天給大家分享13個(gè)游戲源碼,可以自己復(fù)現(xiàn)玩玩,研究下里面的編程邏輯,對(duì)學(xué)習(xí)編程(特別是初學(xué)者)應(yīng)該會(huì)有很大幫助。

1、吃金幣

python小游戲源代碼,Python,python,pygame,開(kāi)發(fā)語(yǔ)言

源碼分享:

import os
import cfg
import sys
import pygame
import random
from modules import?*
?
?
'''游戲初始化'''
def initGame():
????#?初始化pygame,?設(shè)置展示窗口
????pygame.init()
????screen?=?pygame.display.set_mode(cfg.SCREENSIZE)
????



????#?加載必要的游戲素材
????game_images?=?{}
????for?key,?value?in?cfg.IMAGE_PATHS.items():
????????if?isinstance(value,?list):
????????????images?=?[]
????????????for?item?in?value:?images.append(pygame.image.load(item))
????????????game_images[key]?=?images
????????else:
????????????game_images[key]?=?pygame.image.load(value)
????game_sounds?=?{}
????for?key,?value?in?cfg.AUDIO_PATHS.items():
????????if?key?==?'bgm':?continue
????????game_sounds[key]?=?pygame.mixer.Sound(value)
????#?返回初始化數(shù)據(jù)
????return?screen,?game_images,?game_sounds
?
?
'''主函數(shù)'''
def main():
????#?初始化
????screen,?game_images,?game_sounds?=?initGame()
????#?播放背景音樂(lè)
????pygame.mixer.music.load(cfg.AUDIO_PATHS['bgm'])
????pygame.mixer.music.play(-1,?0.0)
????#?字體加載
????font?=?pygame.font.Font(cfg.FONT_PATH,?40)
????#?定義hero
????hero?=?Hero(game_images['hero'],?position=(375,?520))
????#?定義食物組
????food_sprites_group?=?pygame.sprite.Group()
????generate_food_freq?=?random.randint(10,?20)
????generate_food_count?=?0
????#?當(dāng)前分?jǐn)?shù)/歷史最高分
????score?=?0
????highest_score?=?0?if?not os.path.exists(cfg.HIGHEST_SCORE_RECORD_FILEPATH)?else?int(open(cfg.HIGHEST_SCORE_RECORD_FILEPATH).read())
????#?游戲主循環(huán)
????clock?=?pygame.time.Clock()
????while?True:
????????#?--填充背景
????????screen.fill(0)
????????screen.blit(game_images['background'],?(0,?0))
????????#?--倒計(jì)時(shí)信息
????????countdown_text?=?'Count down:?'?+?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)
????????#?--按鍵檢測(cè)
????????for?event?in?pygame.event.get():
????????????if?event.type?==?pygame.QUIT:
????????????????pygame.quit()
????????????????sys.exit()
????????key_pressed?=?pygame.key.get_pressed()
????????if?key_pressed[pygame.K_a]?or key_pressed[pygame.K_LEFT]:
????????????hero.move(cfg.SCREENSIZE,?'left')
????????if?key_pressed[pygame.K_d]?or key_pressed[pygame.K_RIGHT]:
????????????hero.move(cfg.SCREENSIZE,?'right')
????????#?--隨機(jī)生成食物
????????generate_food_count?+=?1
????????if?generate_food_count?>?generate_food_freq:
????????????generate_food_freq?=?random.randint(10,?20)
????????????generate_food_count?=?0
????????????food?=?Food(game_images,?random.choice(['gold',]?*?10?+?['apple']),?cfg.SCREENSIZE)
????????????food_sprites_group.add(food)
????????#?--更新食物
????????for?food?in?food_sprites_group:
????????????if?food.update():?food_sprites_group.remove(food)
????????#?--碰撞檢測(cè)
????????for?food?in?food_sprites_group:
????????????if?pygame.sprite.collide_mask(food,?hero):
????????????????game_sounds['get'].play()
????????????????food_sprites_group.remove(food)
????????????????score?+=?food.score
????????????????if?score?>?highest_score:?highest_score?=?score
????????#?--畫(huà)hero
????????hero.draw(screen)
????????#?--畫(huà)食物
????????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)
????????#?--判斷游戲是否結(jié)束
????????if?pygame.time.get_ticks()?>=?90000:
????????????break
????????#?--更新屏幕
????????pygame.display.flip()
????????clock.tick(cfg.FPS)
????#?游戲結(jié)束,?記錄最高分并顯示游戲結(jié)束畫(huà)面
????fp?=?open(cfg.HIGHEST_SCORE_RECORD_FILEPATH,?'w')
????fp.write(str(highest_score))
????fp.close()
????return?showEndGameInterface(screen,?cfg,?score,?highest_score)
?
?
'''run'''
if?__name__?==?'__main__':
????while?main():
????????pass

2、打乒乓

python小游戲源代碼,Python,python,pygame,開(kāi)發(fā)語(yǔ)言

源碼分享:

import sys
import cfg
import pygame
from modules import?*
?
?
'''定義按鈕'''
def Button(screen,?position,?text,?button_size=(200,?50)):
????left,?top?=?position
????bwidth,?bheight?=?button_size
????pygame.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))
????return?screen.blit(text_render,?(left+50,?top+10))
?
?
'''
Function:
????開(kāi)始界面
Input:
????--screen:?游戲界面
Return:
????--game_mode:?1(單人模式)/2(雙人模式)
'''
def startInterface(screen):
????clock?=?pygame.time.Clock()
????while?True:
????????screen.fill((41,?36,?33))
????????button_1?=?Button(screen,?(150,?175),?'1 Player')
????????button_2?=?Button(screen,?(150,?275),?'2 Player')
????????for?event?in?pygame.event.get():
????????????if?event.type?==?pygame.QUIT:
????????????????pygame.quit()
????????????????sys.exit()
????????????if?event.type?==?pygame.MOUSEBUTTONDOWN:
????????????????if?button_1.collidepoint(pygame.mouse.get_pos()):
????????????????????return?1
????????????????elif?button_2.collidepoint(pygame.mouse.get_pos()):
????????????????????return?2
????????clock.tick(10)
????????pygame.display.update()
?
?
'''結(jié)束界面'''
def endInterface(screen,?score_left,?score_right):
????clock?=?pygame.time.Clock()
????font1?=?pygame.font.Font(cfg.FONTPATH,?30)
????font2?=?pygame.font.Font(cfg.FONTPATH,?20)
????msg?=?'Player on left won!'?if?score_left?>?score_right?else?'Player on right won!'
????texts?=?[font1.render(msg,?True,?cfg.WHITE),
????????????font2.render('Press ESCAPE to quit.',?True,?cfg.WHITE),
????????????font2.render('Press ENTER to continue or play again.',?True,?cfg.WHITE)]
????positions?=?[[120,?200],?[155,?270],?[80,?300]]
????while?True:
????????screen.fill((41,?36,?33))
????????for?event?in?pygame.event.get():
????????????if?event.type?==?pygame.QUIT:
????????????????pygame.quit()
????????????????sys.exit()
????????????if?event.type?==?pygame.KEYDOWN:
????????????????if?event.key?==?pygame.K_RETURN:
????????????????????return
????????????????elif?event.key?==?pygame.K_ESCAPE:
????????????????????sys.exit()
????????????????????pygame.quit()
????????for?text,?pos?in?zip(texts,?positions):
????????????screen.blit(text,?pos)
????????clock.tick(10)
????????pygame.display.update()
?
?
'''運(yùn)行游戲Demo'''
def runDemo(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)
????#?開(kāi)始界面
????game_mode?=?startInterface(screen)
????#?游戲主循環(huán)
????#?--左邊球拍(ws控制,?僅雙人模式時(shí)可控制)
????score_left?=?0
????racket_left?=?Racket(cfg.RACKETPICPATH,?'LEFT',?cfg)
????#?--右邊球拍(↑↓控制)
????score_right?=?0
????racket_right?=?Racket(cfg.RACKETPICPATH,?'RIGHT',?cfg)
????#?--球
????ball?=?Ball(cfg.BALLPICPATH,?cfg)
????clock?=?pygame.time.Clock()
????while?True:
????????for?event?in?pygame.event.get():
????????????if?event.type?==?pygame.QUIT:
????????????????pygame.quit()
????????????????sys.exit(-1)
????????screen.fill((41,?36,?33))
????????#?玩家操作
????????pressed_keys?=?pygame.key.get_pressed()
????????if?pressed_keys[pygame.K_UP]:
????????????racket_right.move('UP')
????????elif?pressed_keys[pygame.K_DOWN]:
????????????racket_right.move('DOWN')
????????if?game_mode?==?2:
????????????if?pressed_keys[pygame.K_w]:
????????????????racket_left.move('UP')
????????????elif?pressed_keys[pygame.K_s]:
????????????????racket_left.move('DOWN')
????????else:
????????????racket_left.automove(ball)
????????#?球運(yùn)動(dòng)
????????scores?=?ball.move(ball,?racket_left,?racket_right,?hit_sound,?goal_sound)
????????score_left?+=?scores[0]
????????score_right?+=?scores[1]
????????#?顯示
????????#?--分隔線(xiàn)
????????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))
????????if?score_left?==?11 or score_right?==?11:
????????????return?score_left,?score_right
????????clock.tick(100)
????????pygame.display.update()
?
?
'''主函數(shù)'''
def main():
????#?初始化
????pygame.init()
????pygame.mixer.init()
????screen?=?pygame.display.set_mode((cfg.WIDTH,?cfg.HEIGHT))
????pygame.display.set_caption('pingpong?——?九歌')
????#?開(kāi)始游戲
????while?True:
????????score_left,?score_right?=?runDemo(screen)
????????endInterface(screen,?score_left,?score_right)
?
?
'''run'''
if?__name__?==?'__main__':
????main()

3、滑雪

python小游戲源代碼,Python,python,pygame,開(kāi)發(fā)語(yǔ)言

源碼分享:

import sys
import cfg
import pygame
import random
?
?
'''滑雪者類(lèi)'''
class SkierClass(pygame.sprite.Sprite):
????def __init__(self):
????????pygame.sprite.Sprite.__init__(self)
????????#?滑雪者的朝向(-2到2)
????????self.direction?=?0
????????self.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]
????'''改變滑雪者的朝向.?負(fù)數(shù)為向左,正數(shù)為向右,0為向前'''
????def turn(self,?num):
????????self.direction?+=?num
????????self.direction?=?max(-2,?self.direction)
????????self.direction?=?min(2,?self.direction)
????????center?=?self.rect.center
????????self.image?=?pygame.image.load(self.imagepaths[self.direction])
????????self.rect?=?self.image.get_rect()
????????self.rect.center?=?center
????????self.speed?=?[self.direction,?6-abs(self.direction)*2]
????????return?self.speed
????'''移動(dòng)滑雪者'''
????def move(self):
????????self.rect.centerx?+=?self.speed[0]
????????self.rect.centerx?=?max(20,?self.rect.centerx)
????????self.rect.centerx?=?min(620,?self.rect.centerx)
????'''設(shè)置為摔倒?fàn)顟B(tài)'''
????def setFall(self):
????????self.image?=?pygame.image.load(cfg.SKIER_IMAGE_PATHS[-1])
????'''設(shè)置為站立狀態(tài)'''
????def setForward(self):
????????self.direction?=?0
????????self.image?=?pygame.image.load(self.imagepaths[self.direction])
?
?
'''
Function:
????障礙物類(lèi)
Input:
????img_path:?障礙物圖片路徑
????location:?障礙物位置
????attribute:?障礙物類(lèi)別屬性
'''
class ObstacleClass(pygame.sprite.Sprite):
????def __init__(self,?img_path,?location,?attribute):
????????pygame.sprite.Sprite.__init__(self)
????????self.img_path?=?img_path
????????self.image?=?pygame.image.load(self.img_path)
????????self.location?=?location
????????self.rect?=?self.image.get_rect()
????????self.rect.center?=?self.location
????????self.attribute?=?attribute
????????self.passed?=?False
????'''移動(dòng)'''
????def move(self,?num):
????????self.rect.centery?=?self.location[1]?-?num
?
?
'''創(chuàng)建障礙物'''
def createObstacles(s,?e,?num=10):
????obstacles?=?pygame.sprite.Group()
????locations?=?[]
????for?i?in?range(num):
????????row?=?random.randint(s,?e)
????????col?=?random.randint(0,?9)
????????location??=?[col*64+20,?row*64+20]
????????if?location not?in?locations:
????????????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)
????return?obstacles
?
?
'''合并障礙物'''
def AddObstacles(obstacles0,?obstacles1):
????obstacles?=?pygame.sprite.Group()
????for?obstacle?in?obstacles0:
????????obstacles.add(obstacle)
????for?obstacle?in?obstacles1:
????????obstacles.add(obstacle)
????return?obstacles
?
?
'''顯示游戲開(kāi)始界面'''
def ShowStartInterface(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'按任意鍵開(kāi)始游戲',?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)
????while?True:
????????for?event?in?pygame.event.get():
????????????if?event.type?==?pygame.QUIT:
????????????????pygame.quit()
????????????????sys.exit()
????????????elif?event.type?==?pygame.KEYDOWN:
????????????????return
????????pygame.display.update()
?
?
'''顯示分?jǐn)?shù)'''
def showScore(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)
?
?
'''更新當(dāng)前幀的游戲畫(huà)面'''
def updateFrame(screen,?obstacles,?skier,?score):
????screen.fill((255,?255,?255))
????obstacles.draw(screen)
????screen.blit(skier.image,?skier.rect)
????showScore(screen,?score)
????pygame.display.update()
?
?
'''主程序'''
def main():
????#?游戲初始化
????pygame.init()
????pygame.mixer.init()
????pygame.mixer.music.load(cfg.BGMPATH)
????pygame.mixer.music.set_volume(0.4)
????pygame.mixer.music.play(-1)
????#?設(shè)置屏幕
????screen?=?pygame.display.set_mode(cfg.SCREENSIZE)
????pygame.display.set_caption('滑雪游戲?——?九歌')
????#?游戲開(kāi)始界面
????ShowStartInterface(screen,?cfg.SCREENSIZE)
????#?實(shí)例化游戲精靈
????#?--滑雪者
????skier?=?SkierClass()
????#?--創(chuàng)建障礙物
????obstacles0?=?createObstacles(20,?29)
????obstacles1?=?createObstacles(10,?19)
????obstaclesflag?=?0
????obstacles?=?AddObstacles(obstacles0,?obstacles1)
????#?游戲clock
????clock?=?pygame.time.Clock()
????#?記錄滑雪的距離
????distance?=?0
????#?記錄當(dāng)前的分?jǐn)?shù)
????score?=?0
????#?記錄當(dāng)前的速度
????speed?=?[0,?6]
????#?游戲主循環(huán)
????while?True:
????????#?--事件捕獲
????????for?event?in?pygame.event.get():
????????????if?event.type?==?pygame.QUIT:
????????????????pygame.quit()
????????????????sys.exit()
????????????if?event.type?==?pygame.KEYDOWN:
????????????????if?event.key?==?pygame.K_LEFT or event.key?==?pygame.K_a:
????????????????????speed?=?skier.turn(-1)
????????????????elif?event.key?==?pygame.K_RIGHT or event.key?==?pygame.K_d:
????????????????????speed?=?skier.turn(1)
????????#?--更新當(dāng)前游戲幀的數(shù)據(jù)
????????skier.move()
????????distance?+=?speed[1]
????????if?distance?>=?640 and obstaclesflag?==?0:
????????????obstaclesflag?=?1
????????????obstacles0?=?createObstacles(20,?29)
????????????obstacles?=?AddObstacles(obstacles0,?obstacles1)
????????if?distance?>=?1280 and obstaclesflag?==?1:
????????????obstaclesflag?=?0
????????????distance?-=?1280
????????????for?obstacle?in?obstacles0:
????????????????obstacle.location[1]?=?obstacle.location[1]?-?1280
????????????obstacles1?=?createObstacles(10,?19)
????????????obstacles?=?AddObstacles(obstacles0,?obstacles1)
????????for?obstacle?in?obstacles:
????????????obstacle.move(distance)
????????#?--碰撞檢測(cè)
????????hitted_obstacles?=?pygame.sprite.spritecollide(skier,?obstacles,?False)
????????if?hitted_obstacles:
????????????if?hitted_obstacles[0].attribute?==?"tree"?and not hitted_obstacles[0].passed:
????????????????score?-=?50
????????????????skier.setFall()
????????????????updateFrame(screen,?obstacles,?skier,?score)
????????????????pygame.time.delay(1000)
????????????????skier.setForward()
????????????????speed?=?[0,?6]
????????????????hitted_obstacles[0].passed?=?True
????????????elif?hitted_obstacles[0].attribute?==?"flag"?and not hitted_obstacles[0].passed:
????????????????score?+=?10
????????????????obstacles.remove(hitted_obstacles[0])
????????#?--更新屏幕
????????updateFrame(screen,?obstacles,?skier,?score)
????????clock.tick(cfg.FPS)
?
?
'''run'''
if?__name__?==?'__main__':
????main();

4、并夕夕版飛機(jī)大戰(zhàn)

python小游戲源代碼,Python,python,pygame,開(kāi)發(fā)語(yǔ)言

源碼分享:

import sys
import cfg
import pygame
from modules import?*
?
?
'''游戲界面'''
def GamingInterface(num_player,?screen):
????#?初始化
????pygame.mixer.music.load(cfg.SOUNDPATHS['Cool Space Music'])
????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?=?0
????bg_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()
????#?產(chǎn)生小行星的時(shí)間間隔
????asteroid_ticks?=?90
????for?i?in?range(num_player):
????????player_group.add(Ship(i+1,?cfg))
????clock?=?pygame.time.Clock()
????#?分?jǐn)?shù)
????score_1,?score_2?=?0,?0
????#?游戲主循環(huán)
????while?True:
????????for?event?in?pygame.event.get():
????????????if?event.type?==?pygame.QUIT:
????????????????pygame.quit()
????????????????sys.exit()
????????#?--玩家一:?↑↓←→控制,?j射擊;?玩家二:?wsad控制,?空格射擊
????????pressed_keys?=?pygame.key.get_pressed()
????????for?idx,?player?in?enumerate(player_group):
????????????direction?=?None
????????????if?idx?==?0:
????????????????if?pressed_keys[pygame.K_UP]:
????????????????????direction?=?'up'
????????????????elif?pressed_keys[pygame.K_DOWN]:
????????????????????direction?=?'down'
????????????????elif?pressed_keys[pygame.K_LEFT]:
????????????????????direction?=?'left'
????????????????elif?pressed_keys[pygame.K_RIGHT]:
????????????????????direction?=?'right'
????????????????if?direction:
????????????????????player.move(direction)
????????????????if?pressed_keys[pygame.K_j]:
????????????????????if?player.cooling_time?==?0:
????????????????????????fire_sound.play()
????????????????????????bullet_group.add(player.shot())
????????????????????????player.cooling_time?=?20
????????????elif?idx?==?1:
????????????????if?pressed_keys[pygame.K_w]:
????????????????????direction?=?'up'
????????????????elif?pressed_keys[pygame.K_s]:
????????????????????direction?=?'down'
????????????????elif?pressed_keys[pygame.K_a]:
????????????????????direction?=?'left'
????????????????elif?pressed_keys[pygame.K_d]:
????????????????????direction?=?'right'
????????????????if?direction:
????????????????????player.move(direction)
????????????????if?pressed_keys[pygame.K_SPACE]:
????????????????????if?player.cooling_time?==?0:
????????????????????????fire_sound.play()
????????????????????????bullet_group.add(player.shot())
????????????????????????player.cooling_time?=?20
????????????if?player.cooling_time?>?0:
????????????????player.cooling_time?-=?1
????????if?(score_1?+?score_2)?<?500:
????????????background?=?bg_1
????????elif?(score_1?+?score_2)?<?1500:
????????????background?=?bg_2
????????else:
????????????background?=?bg_3
????????#?--向下移動(dòng)背景圖實(shí)現(xiàn)飛船向上移動(dòng)的效果
????????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
????????#?--生成小行星
????????if?asteroid_ticks?==?0:
????????????asteroid_ticks?=?90
????????????asteroid_group.add(Asteroid(cfg))
????????else:
????????????asteroid_ticks?-=?1
????????#?--畫(huà)飛船
????????for?player?in?player_group:
????????????if?pygame.sprite.spritecollide(player,?asteroid_group,?True,?None):
????????????????player.explode_step?=?1
????????????????explosion_sound.play()
????????????elif?player.explode_step?>?0:
????????????????if?player.explode_step?>?3:
????????????????????player_group.remove(player)
????????????????????if?len(player_group)?==?0:
????????????????????????return
????????????????else:
????????????????????player.explode(screen)
????????????else:
????????????????player.draw(screen)
????????#?--畫(huà)子彈
????????for?bullet?in?bullet_group:
????????????bullet.move()
????????????if?pygame.sprite.spritecollide(bullet,?asteroid_group,?True,?None):
????????????????bullet_group.remove(bullet)
????????????????if?bullet.player_idx?==?1:
????????????????????score_1?+=?1
????????????????else:
????????????????????score_2?+=?1
????????????else:
????????????????bullet.draw(screen)
????????#?--畫(huà)小行星
????????for?asteroid?in?asteroid_group:
????????????asteroid.move()
????????????asteroid.rotate()
????????????asteroid.draw(screen)
????????#?--顯示分?jǐn)?shù)
????????score_1_text?=?'玩家一得分:?%s'?%?score_1
????????score_2_text?=?'玩家二得分:?%s'?%?score_2
????????text_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)
?
?
'''主函數(shù)'''
def main():
????pygame.init()
????pygame.font.init()
????pygame.mixer.init()
????screen?=?pygame.display.set_mode(cfg.SCREENSIZE)
????pygame.display.set_caption('飛機(jī)大戰(zhàn)?——?九歌')
????num_player?=?StartInterface(screen,?cfg)
????if?num_player?==?1:
????????while?True:
????????????GamingInterface(num_player=1,?screen=screen)
????????????EndInterface(screen,?cfg)
????else:
????????while?True:
????????????GamingInterface(num_player=2,?screen=screen)
????????????EndInterface(screen,?cfg)
?
?
'''run'''
if?__name__?==?'__main__':
????main()

5、打地鼠

python小游戲源代碼,Python,python,pygame,開(kāi)發(fā)語(yǔ)言

源碼分享:

import cfg
import sys
import pygame
import random
from modules import?*
?
?
'''游戲初始化'''
def initGame():
????pygame.init()
????pygame.mixer.init()
????screen?=?pygame.display.set_mode(cfg.SCREENSIZE)
????pygame.display.set_caption('打地鼠?——?九歌')
????return?screen
?
?
'''主函數(shù)'''
def main():
????#?初始化
????screen?=?initGame()
????#?加載背景音樂(lè)和其他音效
????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)
????#?開(kāi)始界面
????startInterface(screen,?cfg.GAME_BEGIN_IMAGEPATHS)
????#?地鼠改變位置的計(jì)時(shí)
????hole_pos?=?random.choice(cfg.HOLE_POSITIONS)
????change_hole_event?=?pygame.USEREVENT
????pygame.time.set_timer(change_hole_event,?800)
????#?地鼠
????mole?=?Mole(cfg.MOLE_IMAGEPATHS,?hole_pos)
????#?錘子
????hammer?=?Hammer(cfg.HAMMER_IMAGEPATHS,?(500,?250))
????#?時(shí)鐘
????clock?=?pygame.time.Clock()
????#?分?jǐn)?shù)
????your_score?=?0
????flag?=?False
????#?初始時(shí)間
????init_time?=?pygame.time.get_ticks()
????#?游戲主循環(huán)
????while?True:
????????#?--游戲時(shí)間為60s
????????time_remain?=?round((61000?-?(pygame.time.get_ticks()?-?init_time))?/?1000.)
????????#?--游戲時(shí)間減少,?地鼠變位置速度變快
????????if?time_remain?==?40 and not flag:
????????????hole_pos?=?random.choice(cfg.HOLE_POSITIONS)
????????????mole.reset()
????????????mole.setPosition(hole_pos)
????????????pygame.time.set_timer(change_hole_event,?650)
????????????flag?=?True
????????elif?time_remain?==?20 and flag:
????????????hole_pos?=?random.choice(cfg.HOLE_POSITIONS)
????????????mole.reset()
????????????mole.setPosition(hole_pos)
????????????pygame.time.set_timer(change_hole_event,?500)
????????????flag?=?False
????????#?--倒計(jì)時(shí)音效
????????if?time_remain?==?10:
????????????audios['count_down'].play()
????????#?--游戲結(jié)束
????????if?time_remain?<?0:?break
????????count_down_text?=?font.render('Time:?'+str(time_remain),?True,?cfg.WHITE)
????????#?--按鍵檢測(cè)
????????for?event?in?pygame.event.get():
????????????if?event.type?==?pygame.QUIT:
????????????????pygame.quit()
????????????????sys.exit()
????????????elif?event.type?==?pygame.MOUSEMOTION:
????????????????hammer.setPosition(pygame.mouse.get_pos())
????????????elif?event.type?==?pygame.MOUSEBUTTONDOWN:
????????????????if?event.button?==?1:
????????????????????hammer.setHammering()
????????????elif?event.type?==?change_hole_event:
????????????????hole_pos?=?random.choice(cfg.HOLE_POSITIONS)
????????????????mole.reset()
????????????????mole.setPosition(hole_pos)
????????#?--碰撞檢測(cè)
????????if?hammer.is_hammering and not mole.is_hammer:
????????????is_hammer?=?pygame.sprite.collide_mask(hammer,?mole)
????????????if?is_hammer:
????????????????audios['hammering'].play()
????????????????mole.setBeHammered()
????????????????your_score?+=?10
????????#?--分?jǐn)?shù)
????????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)
????#?讀取最佳分?jǐn)?shù)(try塊避免第一次游戲無(wú).rec文件)
????try:
????????best_score?=?int(open(cfg.RECORD_PATH).read())
????except:
????????best_score?=?0
????#?若當(dāng)前分?jǐn)?shù)大于最佳分?jǐn)?shù)則更新最佳分?jǐn)?shù)
????if?your_score?>?best_score:
????????f?=?open(cfg.RECORD_PATH,?'w')
????????f.write(str(your_score))
????????f.close()
????#?結(jié)束界面
????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)
????return?is_restart
?
?
'''run'''
if?__name__?==?'__main__':
????while?True:
????????is_restart?=?main()
????????if?not is_restart:
????????????break

6、小恐龍

python小游戲源代碼,Python,python,pygame,開(kāi)發(fā)語(yǔ)言

玩法:上下控制起跳躲避

源碼分享:

import cfg
import sys
import random
import pygame
from modules import?*
?
?
'''main'''
def main(highest_score):
????#?游戲初始化
????pygame.init()
????screen?=?pygame.display.set_mode(cfg.SCREENSIZE)
????pygame.display.set_caption('九歌')
????#?導(dǎo)入所有聲音文件
????sounds?=?{}
????for?key,?value?in?cfg.AUDIO_PATHS.items():
????????sounds[key]?=?pygame.mixer.Sound(value)
????#?游戲開(kāi)始界面
????GameStartInterface(screen,?sounds,?cfg)
????#?定義一些游戲中必要的元素和變量
????score?=?0
????score_board?=?Scoreboard(cfg.IMAGE_PATHS['numbers'],?position=(534,?15),?bg_color=cfg.BACKGROUND_COLOR)
????highest_score?=?highest_score
????highest_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?=?0
????score_timer?=?0
????#?游戲主循環(huán)
????clock?=?pygame.time.Clock()
????while?True:
????????for?event?in?pygame.event.get():
????????????if?event.type?==?pygame.QUIT:
????????????????pygame.quit()
????????????????sys.exit()
????????????elif?event.type?==?pygame.KEYDOWN:
????????????????if?event.key?==?pygame.K_SPACE or event.key?==?pygame.K_UP:
????????????????????dino.jump(sounds)
????????????????elif?event.key?==?pygame.K_DOWN:
????????????????????dino.duck()
????????????elif?event.type?==?pygame.KEYUP and event.key?==?pygame.K_DOWN:
????????????????dino.unduck()
????????screen.fill(cfg.BACKGROUND_COLOR)
????????#?--隨機(jī)添加云
????????if?len(cloud_sprites_group)?<?5 and random.randrange(0,?300)?==?10:
????????????cloud_sprites_group.add(Cloud(cfg.IMAGE_PATHS['cloud'],?position=(cfg.SCREENSIZE[0],?random.randrange(30,?75))))
????????#?--隨機(jī)添加仙人掌/飛龍
????????add_obstacle_timer?+=?1
????????if?add_obstacle_timer?>?random.randrange(50,?150):
????????????add_obstacle_timer?=?0
????????????random_value?=?random.randrange(0,?10)
????????????if?random_value?>=?5 and random_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?+=?1
????????if?score_timer?>?(cfg.FPS//12):
????????????score_timer?=?0
????????????score?+=?1
????????????score?=?min(score,?99999)
????????????if?score?>?highest_score:
????????????????highest_score?=?score
????????????if?score?%?100?==?0:
????????????????sounds['point'].play()
????????????if?score?%?1000?==?0:
????????????????ground.speed?-=?1
????????????????for?item?in?cloud_sprites_group:
????????????????????item.speed?-=?1
????????????????for?item?in?cactus_sprites_group:
????????????????????item.speed?-=?1
????????????????for?item?in?ptera_sprites_group:
????????????????????item.speed?-=?1
????????#?--碰撞檢測(cè)
????????for?item?in?cactus_sprites_group:
????????????if?pygame.sprite.collide_mask(dino,?item):
????????????????dino.die(sounds)
????????for?item?in?ptera_sprites_group:
????????????if?pygame.sprite.collide_mask(dino,?item):
????????????????dino.die(sounds)
????????#?--將游戲元素畫(huà)到屏幕上
????????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)
????????#?--游戲是否結(jié)束
????????if?dino.is_dead:
????????????break
????#?游戲結(jié)束界面
????return?GameEndInterface(screen,?cfg),?highest_score
?
?
'''run'''
if?__name__?==?'__main__':
????highest_score?=?0
????while?True:
????????flag,?highest_score?=?main(highest_score)
????????if?not flag:?break

7、消消樂(lè)

玩法:三個(gè)相連就能消除

python小游戲源代碼,Python,python,pygame,開(kāi)發(fā)語(yǔ)言

源碼分享:

import os
import sys
import cfg
import pygame
from modules import?*
?
?
'''游戲主程序'''
def main():
????pygame.init()
????screen?=?pygame.display.set_mode(cfg.SCREENSIZE)
????pygame.display.set_caption('Gemgem?——?九歌')
????#?加載背景音樂(lè)
????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']?=?[]
????for?i?in?range(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?=?[]
????for?i?in?range(1,?8):
????????gem_imgs.append(os.path.join(cfg.ROOTDIR,?'resources/images/gem%s.png'?%?i))
????#?主循環(huán)
????game?=?gemGame(screen,?sounds,?font,?gem_imgs,?cfg)
????while?True:
????????score?=?game.start()
????????flag?=?False
????????#?一輪游戲結(jié)束后玩家選擇重玩或者退出
????????while?True:
????????????for?event?in?pygame.event.get():
????????????????if?event.type?==?pygame.QUIT or?(event.type?==?pygame.KEYUP and event.key?==?pygame.K_ESCAPE):
????????????????????pygame.quit()
????????????????????sys.exit()
????????????????elif?event.type?==?pygame.KEYUP and event.key?==?pygame.K_r:
????????????????????flag?=?True
????????????if?flag:
????????????????break
????????????screen.fill((135,?206,?235))
????????????text0?=?'Final score:?%s'?%?score
????????????text1?=?'Press?<R>?to restart the game.'
????????????text2?=?'Press?<Esc>?to quit the game.'
????????????y?=?150
????????????for?idx,?text?in?enumerate([text0,?text1,?text2]):
????????????????text_render?=?font.render(text,?1,?(85,?65,?0))
????????????????rect?=?text_render.get_rect()
????????????????if?idx?==?0:
????????????????????rect.left,?rect.top?=?(212,?y)
????????????????elif?idx?==?1:
????????????????????rect.left,?rect.top?=?(122.5,?y)
????????????????else:
????????????????????rect.left,?rect.top?=?(126.5,?y)
????????????????y?+=?100
????????????????screen.blit(text_render,?rect)
????????????pygame.display.update()
????????game.reset()
?
?
'''run'''
if?__name__?==?'__main__':
????main()

8、俄羅斯方塊

玩法:童年經(jīng)典,普通模式?jīng)]啥意思,小時(shí)候我們都是玩加速的。

python小游戲源代碼,Python,python,pygame,開(kāi)發(fā)語(yǔ)言

源碼分享:

import os
import sys
import random
from modules import?*
from PyQt5.QtGui import?*
from PyQt5.QtCore import?*
from PyQt5.QtWidgets import?*
?
?
'''定義俄羅斯方塊游戲類(lèi)'''
class TetrisGame(QMainWindow):
????def __init__(self,?parent=None):
????????super(TetrisGame,?self).__init__(parent)
????????#?是否暫停ing
????????self.is_paused?=?False
????????#?是否開(kāi)始ing
????????self.is_started?=?False
????????self.initUI()
????'''界面初始化'''
????def initUI(self):
????????#?icon
????????self.setWindowIcon(QIcon(os.path.join(os.getcwd(),?'resources/icon.jpg')))
????????#?塊大小
????????self.grid_size?=?22
????????#?游戲幀率
????????self.fps?=?200
????????self.timer?=?QBasicTimer()
????????#?焦點(diǎn)
????????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())
????'''游戲界面移動(dòng)到屏幕中間'''
????def center(self):
????????screen?=?QDesktopWidget().screenGeometry()
????????size?=?self.geometry()
????????self.move((screen.width()?-?size.width())?//?2,?(screen.height()?-?size.height())?//?2)
????'''更新界面'''
????def updateWindow(self):
????????self.external_board.updateData()
????????self.side_panel.updateData()
????????self.update()
????'''開(kāi)始'''
????def start(self):
????????if?self.is_started:
????????????return
????????self.is_started?=?True
????????self.inner_board.createNewTetris()
????????self.timer.start(self.fps,?self)
????'''暫停/不暫停'''
????def pause(self):
????????if?not self.is_started:
????????????return
????????self.is_paused?=?not self.is_paused
????????if?self.is_paused:
????????????self.timer.stop()
????????????self.external_board.score_signal.emit('Paused')
????????else:
????????????self.timer.start(self.fps,?self)
????????self.updateWindow()
????'''計(jì)時(shí)器事件'''
????def timerEvent(self,?event):
????????if?event.timerId()?==?self.timer.timerId():
????????????removed_lines?=?self.inner_board.moveDown()
????????????self.external_board.score?+=?removed_lines
????????????self.updateWindow()
????????else:
????????????super(TetrisGame,?self).timerEvent(event)
????'''按鍵事件'''
????def keyPressEvent(self,?event):
????????if?not self.is_started or self.inner_board.current_tetris?==?tetrisShape().shape_empty:
????????????super(TetrisGame,?self).keyPressEvent(event)
????????????return
????????key?=?event.key()
????????#?P鍵暫停
????????if?key?==?Qt.Key_P:
????????????self.pause()
????????????return
????????if?self.is_paused:
????????????return
????????#?向左
????????elif?key?==?Qt.Key_Left:
????????????self.inner_board.moveLeft()
????????#?向右
????????elif?key?==?Qt.Key_Right:
????????????self.inner_board.moveRight()
????????#?旋轉(zhuǎn)
????????elif?key?==?Qt.Key_Up:
????????????self.inner_board.rotateAnticlockwise()
????????#?快速墜落
????????elif?key?==?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_())

9、貪吃蛇

python小游戲源代碼,Python,python,pygame,開(kāi)發(fā)語(yǔ)言

玩法:童年經(jīng)典,普通魔術(shù)也沒(méi)啥意思,小時(shí)候玩的也是加速的。

源碼分享:

import cfg
import sys
import pygame
from modules import?*
?
?
'''主函數(shù)'''
def main(cfg):
????#?游戲初始化
????pygame.init()
????screen?=?pygame.display.set_mode(cfg.SCREENSIZE)
????pygame.display.set_caption('Greedy Snake?——?九歌')
????clock?=?pygame.time.Clock()
????#?播放背景音樂(lè)
????pygame.mixer.music.load(cfg.BGMPATH)
????pygame.mixer.music.play(-1)
????#?游戲主循環(huán)
????snake?=?Snake(cfg)
????apple?=?Apple(cfg,?snake.coords)
????score?=?0
????while?True:
????????screen.fill(cfg.BLACK)
????????#?--按鍵檢測(cè)
????????for?event?in?pygame.event.get():
????????????if?event.type?==?pygame.QUIT:
????????????????pygame.quit()
????????????????sys.exit()
????????????elif?event.type?==?pygame.KEYDOWN:
????????????????if?event.key?in?[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])
????????#?--更新貪吃蛇和食物
????????if?snake.update(apple):
????????????apple?=?Apple(cfg,?snake.coords)
????????????score?+=?1
????????#?--判斷游戲是否結(jié)束
????????if?snake.isgameover:?break
????????#?--顯示游戲里必要的元素
????????drawGameGrid(cfg,?screen)
????????snake.draw(screen)
????????apple.draw(screen)
????????showScore(cfg,?score,?screen)
????????#?--屏幕更新
????????pygame.display.update()
????????clock.tick(cfg.FPS)
????return?endInterface(screen,?cfg)
?
?
'''run'''
if?__name__?==?'__main__':
????while?True:
????????if?not main(cfg):
????????????break

10、24點(diǎn)小游戲

玩法:通過(guò)加減乘除操作,小學(xué)生都沒(méi)問(wèn)題的。

python小游戲源代碼,Python,python,pygame,開(kāi)發(fā)語(yǔ)言

源碼分享:

import os
import sys
import pygame
from cfg import?*
from modules import?*
from fractions import Fraction
?
?
'''檢查控件是否被點(diǎn)擊'''
def checkClicked(group,?mouse_pos,?group_type='NUMBER'):
????selected?=?[]
????#?數(shù)字卡片/運(yùn)算符卡片
????if?group_type?==?GROUPTYPES[0]?or group_type?==?GROUPTYPES[1]:
????????max_selected?=?2?if?group_type?==?GROUPTYPES[0]?else?1
????????num_selected?=?0
????????for?each?in?group:
????????????num_selected?+=?int(each.is_selected)
????????for?each?in?group:
????????????if?each.rect.collidepoint(mouse_pos):
????????????????if?each.is_selected:
????????????????????each.is_selected?=?not each.is_selected
????????????????????num_selected?-=?1
????????????????????each.select_order?=?None
????????????????else:
????????????????????if?num_selected?<?max_selected:
????????????????????????each.is_selected?=?not each.is_selected
????????????????????????num_selected?+=?1
????????????????????????each.select_order?=?str(num_selected)
????????????if?each.is_selected:
????????????????selected.append(each.attribute)
????#?按鈕卡片
????elif?group_type?==?GROUPTYPES[2]:
????????for?each?in?group:
????????????if?each.rect.collidepoint(mouse_pos):
????????????????each.is_selected?=?True
????????????????selected.append(each.attribute)
????#?拋出異常
????else:
????????raise ValueError('checkClicked.group_type unsupport?%s,?expect?%s,?%s or?%s...'?%?(group_type,?*GROUPTYPES))
????return?selected
?
?
'''獲取數(shù)字精靈組'''
def getNumberSpritesGroup(numbers):
????number_sprites_group?=?pygame.sprite.Group()
????for?idx,?number?in?enumerate(numbers):
????????args?=?(*NUMBERCARD_POSITIONS[idx],?str(number),?NUMBERFONT,?NUMBERFONT_COLORS,?NUMBERCARD_COLORS,?str(number))
????????number_sprites_group.add(Card(*args))
????return?number_sprites_group
?
?
'''獲取運(yùn)算符精靈組'''
def getOperatorSpritesGroup(operators):
????operator_sprites_group?=?pygame.sprite.Group()
????for?idx,?operator?in?enumerate(operators):
????????args?=?(*OPERATORCARD_POSITIONS[idx],?str(operator),?OPERATORFONT,?OPREATORFONT_COLORS,?OPERATORCARD_COLORS,?str(operator))
????????operator_sprites_group.add(Card(*args))
????return?operator_sprites_group
?
?
'''獲取按鈕精靈組'''
def getButtonSpritesGroup(buttons):
????button_sprites_group?=?pygame.sprite.Group()
????for?idx,?button?in?enumerate(buttons):
????????args?=?(*BUTTONCARD_POSITIONS[idx],?str(button),?BUTTONFONT,?BUTTONFONT_COLORS,?BUTTONCARD_COLORS,?str(button))
????????button_sprites_group.add(Button(*args))
????return?button_sprites_group
?
?
'''計(jì)算'''
def calculate(number1,?number2,?operator):
????operator_map?=?{'+':?'+',?'-':?'-',?'×':?'*',?'÷':?'/'}
????try:
????????result?=?str(eval(number1+operator_map[operator]+number2))
????????return?result?if?'.'?not?in?result?else?str(Fraction(number1+operator_map[operator]+number2))
????except:
????????return?None
?
?
'''在屏幕上顯示信息'''
def showInfo(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))
?
?
'''主函數(shù)'''
def main():
????#?初始化,?導(dǎo)入必要的游戲素材
????pygame.init()
????pygame.mixer.init()
????screen?=?pygame.display.set_mode(SCREENSIZE)
????pygame.display.set_caption('24 point?——?九歌')
????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點(diǎn)游戲生成器
????game24_gen?=?game24Generator()
????game24_gen.generate()
????#?精靈組
????#?--數(shù)字
????number_sprites_group?=?getNumberSpritesGroup(game24_gen.numbers_now)
????#?--運(yùn)算符
????operator_sprites_group?=?getOperatorSpritesGroup(OPREATORS)
????#?--按鈕
????button_sprites_group?=?getButtonSpritesGroup(BUTTONS)
????#?游戲主循環(huán)
????clock?=?pygame.time.Clock()
????selected_numbers?=?[]
????selected_operators?=?[]
????selected_buttons?=?[]
????is_win?=?False
????while?True:
????????for?event?in?pygame.event.get():
????????????if?event.type?==?pygame.QUIT:
????????????????pygame.quit()
????????????????sys.exit(-1)
????????????elif?event.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)
????????#?更新數(shù)字
????????if?len(selected_numbers)?==?2 and len(selected_operators)?==?1:
????????????noselected_numbers?=?[]
????????????for?each?in?number_sprites_group:
????????????????if?each.is_selected:
????????????????????if?each.select_order?==?'1':
????????????????????????selected_number1?=?each.attribute
????????????????????elif?each.select_order?==?'2':
????????????????????????selected_number2?=?each.attribute
????????????????????else:
????????????????????????raise ValueError('Unknow select_order?%s,?expect 1 or 2...'?%?each.select_order)
????????????????else:
????????????????????noselected_numbers.append(each.attribute)
????????????????each.is_selected?=?False
????????????for?each?in?operator_sprites_group:
????????????????each.is_selected?=?False
????????????result?=?calculate(selected_number1,?selected_number2,?*selected_operators)
????????????if?result is not None:
????????????????game24_gen.numbers_now?=?noselected_numbers?+?[result]
????????????????is_win?=?game24_gen.check()
????????????????if?is_win:
????????????????????win_sound.play()
????????????????if?not is_win and len(game24_gen.numbers_now)?==?1:
????????????????????lose_sound.play()
????????????else:
????????????????warn_sound.play()
????????????selected_numbers?=?[]
????????????selected_operators?=?[]
????????????number_sprites_group?=?getNumberSpritesGroup(game24_gen.numbers_now)
????????#?精靈都畫(huà)到screen上
????????for?each?in?number_sprites_group:
????????????each.draw(screen,?pygame.mouse.get_pos())
????????for?each?in?operator_sprites_group:
????????????each.draw(screen,?pygame.mouse.get_pos())
????????for?each?in?button_sprites_group:
????????????if?selected_buttons and selected_buttons[0]?in?['RESET',?'NEXT']:
????????????????is_win?=?False
????????????if?selected_buttons and each.attribute?==?selected_buttons[0]:
????????????????each.is_selected?=?False
????????????????number_sprites_group?=?each.do(game24_gen,?getNumberSpritesGroup,?number_sprites_group,?button_sprites_group)
????????????????selected_buttons?=?[]
????????????each.draw(screen,?pygame.mouse.get_pos())
????????#?游戲勝利
????????if?is_win:
????????????showInfo('Congratulations',?screen)
????????#?游戲失敗
????????if?not is_win and len(game24_gen.numbers_now)?==?1:
????????????showInfo('Game Over',?screen)
????????pygame.display.flip()
????????clock.tick(30)
?
?
'''run'''
if?__name__?==?'__main__':
????main()

11、平衡木

python小游戲源代碼,Python,python,pygame,開(kāi)發(fā)語(yǔ)言

玩法:也是小時(shí)候的經(jīng)典游戲,控制左右就行,到后面才有一點(diǎn)點(diǎn)難度。

源碼分享:

import cfg
from modules import breakoutClone
?
?
'''主函數(shù)'''
def main():
????game?=?breakoutClone(cfg)
????game.run()
?
?
'''run'''
if?__name__?==?'__main__':
????main()

12、外星人入侵

玩法:這讓我想起了魂斗羅那第幾關(guān)的boss,有點(diǎn)類(lèi)似,不過(guò)魂斗羅那個(gè)難度肯定高點(diǎn)。

python小游戲源代碼,Python,python,pygame,開(kāi)發(fā)語(yǔ)言

源碼分享:

import os
import sys
import cfg
import random
import pygame
from modules import?*
?
?
'''開(kāi)始游戲'''
def startGame(screen):
????clock?=?pygame.time.Clock()
????#?加載字體
????font?=?pygame.font.SysFont('arial',?18)
????if?not os.path.isfile('score'):
????????f?=?open('score',?'w')
????????f.write('0')
????????f.close()
????with open('score',?'r')?as f:
????????highest_score?=?int(f.read().strip())
????#?敵方
????enemies_group?=?pygame.sprite.Group()
????for?i?in?range(55):
????????if?i?<?11:
????????????enemy?=?enemySprite('small',?i,?cfg.WHITE,?cfg.WHITE)
????????elif?i?<?33:
????????????enemy?=?enemySprite('medium',?i,?cfg.WHITE,?cfg.WHITE)
????????else:
????????????enemy?=?enemySprite('large',?i,?cfg.WHITE,?cfg.WHITE)
????????enemy.rect.x?=?85?+?(i?%?11)?*?50
????????enemy.rect.y?=?120?+?(i?//?11)?*?45
????????enemies_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()
????#?用于控制敵方位置更新
????#?--移動(dòng)一行
????enemy_move_count?=?24
????enemy_move_interval?=?24
????enemy_move_flag?=?False
????#?--改變移動(dòng)方向(改變方向的同時(shí)集體下降一次)
????enemy_change_direction_count?=?0
????enemy_change_direction_interval?=?60
????enemy_need_down?=?False
????enemy_move_right?=?True
????enemy_need_move_row?=?6
????enemy_max_row?=?5
????#?用于控制敵方發(fā)射子彈
????enemy_shot_interval?=?100
????enemy_shot_count?=?0
????enemy_shot_flag?=?False
????#?游戲進(jìn)行中
????running?=?True
????is_win?=?False
????#?主循環(huán)
????while?running:
????????screen.fill(cfg.BLACK)
????????for?event?in?pygame.event.get():
????????????#?--點(diǎn)右上角的X或者按Esc鍵退出游戲
????????????if?event.type?==?pygame.QUIT:
????????????????pygame.quit()
????????????????sys.exit()
????????????if?event.type?==?pygame.KEYDOWN:
????????????????if?event.key?==?pygame.K_ESCAPE:
????????????????????pygame.quit()
????????????????????sys.exit()
????????????#?--射擊
????????????if?event.type?==?pygame.MOUSEBUTTONDOWN:
????????????????my_bullet?=?myaircraft.shot()
????????????????if?my_bullet:
????????????????????my_bullets_group.add(my_bullet)
????????#?--我方子彈與敵方/UFO碰撞檢測(cè)
????????for?enemy?in?enemies_group:
????????????if?pygame.sprite.spritecollide(enemy,?my_bullets_group,?True,?None):
????????????????boomed_enemies_group.add(enemy)
????????????????enemies_group.remove(enemy)
????????????????myaircraft.score?+=?enemy.reward
????????if?pygame.sprite.spritecollide(ufo,?my_bullets_group,?True,?None):
????????????ufo.is_dead?=?True
????????????myaircraft.score?+=?ufo.reward
????????#?--更新并畫(huà)敵方
????????#?----敵方子彈
????????enemy_shot_count?+=?1
????????if?enemy_shot_count?>?enemy_shot_interval:
????????????enemy_shot_flag?=?True
????????????enemies_survive_list?=?[enemy.number?for?enemy?in?enemies_group]
????????????shot_number?=?random.choice(enemies_survive_list)
????????????enemy_shot_count?=?0
????????#?----敵方移動(dòng)
????????enemy_move_count?+=?1
????????if?enemy_move_count?>?enemy_move_interval:
????????????enemy_move_count?=?0
????????????enemy_move_flag?=?True
????????????enemy_need_move_row?-=?1
????????????if?enemy_need_move_row?==?0:
????????????????enemy_need_move_row?=?enemy_max_row
????????????enemy_change_direction_count?+=?1
????????????if?enemy_change_direction_count?>?enemy_change_direction_interval:
????????????????enemy_change_direction_count?=?1
????????????????enemy_move_right?=?not enemy_move_right
????????????????enemy_need_down?=?True
????????????????#?----每次下降提高移動(dòng)和射擊速度
????????????????enemy_move_interval?=?max(15,?enemy_move_interval-3)
????????????????enemy_shot_interval?=?max(50,?enemy_move_interval-10)
????????#?----遍歷更新
????????for?enemy?in?enemies_group:
????????????if?enemy_shot_flag:
????????????????if?enemy.number?==?shot_number:
????????????????????en_bullet?=?enemy.shot()
????????????????????en_bullets_group.add(en_bullet)
????????????if?enemy_move_flag:
????????????????if?enemy.number?in?range((enemy_need_move_row-1)*11,?enemy_need_move_row*11):
????????????????????if?enemy_move_right:
????????????????????????enemy.update('right',?cfg.SCREENSIZE[1])
????????????????????else:
????????????????????????enemy.update('left',?cfg.SCREENSIZE[1])
????????????else:
????????????????enemy.update(None,?cfg.SCREENSIZE[1])
????????????if?enemy_need_down:
????????????????if?enemy.update('down',?cfg.SCREENSIZE[1]):
????????????????????running?=?False
????????????????????is_win?=?False
????????????????enemy.change_count?-=?1
????????????enemy.draw(screen)
????????enemy_move_flag?=?False
????????enemy_need_down?=?False
????????enemy_shot_flag?=?False
????????#?----敵方爆炸特效
????????for?boomed_enemy?in?boomed_enemies_group:
????????????if?boomed_enemy.boom(screen):
????????????????boomed_enemies_group.remove(boomed_enemy)
????????????????del boomed_enemy
????????#?--敵方子彈與我方飛船碰撞檢測(cè)
????????if?not myaircraft.one_dead:
????????????if?pygame.sprite.spritecollide(myaircraft,?en_bullets_group,?True,?None):
????????????????myaircraft.one_dead?=?True
????????if?myaircraft.one_dead:
????????????if?myaircraft.boom(screen):
????????????????myaircraft.resetBoom()
????????????????myaircraft.num_life?-=?1
????????????????if?myaircraft.num_life?<?1:
????????????????????running?=?False
????????????????????is_win?=?False
????????else:
????????????#?----更新飛船
????????????myaircraft.update(cfg.SCREENSIZE[0])
????????????#?----畫(huà)飛船
????????????myaircraft.draw(screen)
????????if?(not ufo.has_boomed)?and?(ufo.is_dead):
????????????if?ufo.boom(screen):
????????????????ufo.has_boomed?=?True
????????else:
????????????#?----更新UFO
????????????ufo.update(cfg.SCREENSIZE[0])
????????????#?----畫(huà)UFO
????????????ufo.draw(screen)
????????#?--畫(huà)我方飛船子彈
????????for?bullet?in?my_bullets_group:
????????????if?bullet.update():
????????????????my_bullets_group.remove(bullet)
????????????????del bullet
????????????else:
????????????????bullet.draw(screen)
????????#?--畫(huà)敵方子彈
????????for?bullet?in?en_bullets_group:
????????????if?bullet.update(cfg.SCREENSIZE[1]):
????????????????en_bullets_group.remove(bullet)
????????????????del bullet
????????????else:
????????????????bullet.draw(screen)
????????if?myaircraft.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.score
????????????myaircraft.num_life?=?min(myaircraft.num_life?+?1,?myaircraft.max_num_life)
????????#?--敵人都死光了的話(huà)就勝利了
????????if?len(enemies_group)?<?1:
????????????is_win?=?True
????????????running?=?False
????????#?--顯示文字
????????#?----當(dāng)前得分
????????showText(screen,?'SCORE:?',?cfg.WHITE,?font,?200,?8)
????????showText(screen,?str(myaircraft.score),?cfg.WHITE,?font,?200,?24)
????????#?----敵人數(shù)量
????????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)
????????#?----FPS
????????showText(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)
????with open('score',?'w')?as f:
????????f.write(str(highest_score))
????return?is_win
?
?
'''主函數(shù)'''
def main():
????#?初始化
????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)
????while?True:
????????is_win?=?startGame(screen)
????????endInterface(screen,?cfg.BLACK,?is_win)
?
?
'''run'''
if?__name__?==?'__main__':
????main()

13、井字棋888

python小游戲源代碼,Python,python,pygame,開(kāi)發(fā)語(yǔ)言

玩法:我打賭大家在課堂上肯定玩過(guò)這個(gè),想想當(dāng)年和同桌玩這個(gè)廢了好幾本本子。

源碼分享:

from tkinter import?*
import tkinter.messagebox as msg
?
root?=?Tk()
root.title('TIC-TAC-TOE---Project Gurukul')
#?labels
Label(root,?text="player1?:?X",?font="times 15").grid(row=0,?column=1)
Label(root,?text="player2?:?O",?font="times 15").grid(row=0,?column=2)
?
digits?=?[1,?2,?3,?4,?5,?6,?7,?8,?9]
?
#?for player1 sign?=?X and for player2 sign=?Y
mark?=?''
?
#?counting the no.?of click
count?=?0
?
panels?=?["panel"]?*?10
?
?
def win(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))
?
?
def checker(digit):
????global count,?mark,?digits
?
????#?Check which button clicked
?
????if?digit?==?1 and digit?in?digits:
????????digits.remove(digit)
????????##player1 will play if the value of count is even and for odd player2 will play
????????if?count?%?2?==?0:
????????????mark?=?'X'
????????????panels[digit]?=?mark
????????elif?count?%?2?!=?0:
????????????mark?=?'O'
????????????panels[digit]?=?mark
?
????????button1.config(text=mark)
????????count?=?count?+?1
????????sign?=?mark
?
????????if?(win(panels,?sign)?and sign?==?'X'):
????????????msg.showinfo("Result",?"Player1 wins")
????????????root.destroy()
????????elif?(win(panels,?sign)?and sign?==?'O'):
????????????msg.showinfo("Result",?"Player2 wins")
????????????root.destroy()
?
????if?digit?==?2 and digit?in?digits:
????????digits.remove(digit)
?
????????if?count?%?2?==?0:
????????????mark?=?'X'
????????????panels[digit]?=?mark
????????elif?count?%?2?!=?0:
????????????mark?=?'O'
????????????panels[digit]?=?mark
?
????????button2.config(text=mark)
????????count?=?count?+?1
????????sign?=?mark
?
????????if?(win(panels,?sign)?and sign?==?'X'):
????????????msg.showinfo("Result",?"Player1 wins")
????????????root.destroy()
????????elif?(win(panels,?sign)?and sign?==?'O'):
????????????msg.showinfo("Result",?"Player2 wins")
????????????root.destroy()
?
????if?digit?==?3 and digit?in?digits:
????????digits.remove(digit)
?
????????if?count?%?2?==?0:
????????????mark?=?'X'
????????????panels[digit]?=?mark
????????elif?count?%?2?!=?0:
????????????mark?=?'O'
????????????panels[digit]?=?mark
?
????????button3.config(text=mark)
????????count?=?count?+?1
????????sign?=?mark
?
????????if?(win(panels,?sign)?and sign?==?'X'):
????????????msg.showinfo("Result",?"Player1 wins")
????????????root.destroy()
????????elif?(win(panels,?sign)?and sign?==?'O'):
????????????msg.showinfo("Result",?"Player2 wins")
????????????root.destroy()
?
????if?digit?==?4 and digit?in?digits:
????????digits.remove(digit)
?
????????if?count?%?2?==?0:
????????????mark?=?'X'
????????????panels[digit]?=?mark
????????elif?count?%?2?!=?0:
????????????mark?=?'O'
????????????panels[digit]?=?mark
?
????????button4.config(text=mark)
????????count?=?count?+?1
????????sign?=?mark
?
????????if?(win(panels,?sign)?and sign?==?'X'):
????????????msg.showinfo("Result",?"Player1 wins")
????????????root.destroy()
????????elif?(win(panels,?sign)?and sign?==?'O'):
????????????msg.showinfo("Result",?"Player2 wins")
????????????root.destroy()
?
????if?digit?==?5 and digit?in?digits:
????????digits.remove(digit)
?
????????if?count?%?2?==?0:
????????????mark?=?'X'
????????????panels[digit]?=?mark
????????elif?count?%?2?!=?0:
????????????mark?=?'O'
????????????panels[digit]?=?mark
?
????????button5.config(text=mark)
????????count?=?count?+?1
????????sign?=?mark
?
????????if?(win(panels,?sign)?and sign?==?'X'):
????????????msg.showinfo("Result",?"Player1 wins")
????????????root.destroy()
????????elif?(win(panels,?sign)?and sign?==?'O'):
????????????msg.showinfo("Result",?"Player2 wins")
????????????root.destroy()
?
????if?digit?==?6 and digit?in?digits:
????????digits.remove(digit)
?
????????if?count?%?2?==?0:
????????????mark?=?'X'
????????????panels[digit]?=?mark
????????elif?count?%?2?!=?0:
????????????mark?=?'O'
????????????panels[digit]?=?mark
?
????????button6.config(text=mark)
????????count?=?count?+?1
????????sign?=?mark
?
????????if?(win(panels,?sign)?and sign?==?'X'):
????????????msg.showinfo("Result",?"Player1 wins")
????????????root.destroy()
????????elif?(win(panels,?sign)?and sign?==?'O'):
????????????msg.showinfo("Result",?"Player2 wins")
????????????root.destroy()
?
????if?digit?==?7 and digit?in?digits:
????????digits.remove(digit)
?
????????if?count?%?2?==?0:
????????????mark?=?'X'
????????????panels[digit]?=?mark
????????elif?count?%?2?!=?0:
????????????mark?=?'O'
????????????panels[digit]?=?mark
?
????????button7.config(text=mark)
????????count?=?count?+?1
????????sign?=?mark
?
????????if?(win(panels,?sign)?and sign?==?'X'):
????????????msg.showinfo("Result",?"Player1 wins")
????????????root.destroy()
????????elif?(win(panels,?sign)?and sign?==?'O'):
????????????msg.showinfo("Result",?"Player2 wins")
????????????root.destroy()
?
????if?digit?==?8 and digit?in?digits:
????????digits.remove(digit)
?
????????if?count?%?2?==?0:
????????????mark?=?'X'
????????????panels[digit]?=?mark
????????elif?count?%?2?!=?0:
????????????mark?=?'O'
????????????panels[digit]?=?mark
?
????????button8.config(text=mark)
????????count?=?count?+?1
????????sign?=?mark
?
????????if?(win(panels,?sign)?and sign?==?'X'):
????????????msg.showinfo("Result",?"Player1 wins")
????????????root.destroy()
????????elif?(win(panels,?sign)?and sign?==?'O'):
????????????msg.showinfo("Result",?"Player2 wins")
????????????root.destroy()
?
????if?digit?==?9 and digit?in?digits:
????????digits.remove(digit)
?
????????if?count?%?2?==?0:
????????????mark?=?'X'
????????????panels[digit]?=?mark
????????elif?count?%?2?!=?0:
????????????mark?=?'O'
????????????panels[digit]?=?mark
?
????????button9.config(text=mark)
????????count?=?count?+?1
????????sign?=?mark
?
????????if?(win(panels,?sign)?and sign?==?'X'):
????????????msg.showinfo("Result",?"Player1 wins")
????????????root.destroy()
????????elif?(win(panels,?sign)?and sign?==?'O'):
????????????msg.showinfo("Result",?"Player2 wins")
????????????root.destroy()
?
????###if count is greater then 8 then the match has been tied
????if?(count?>?8 and win(panels,?'X')?==?False and win(panels,?'O')?==?False):
????????msg.showinfo("Result",?"Match Tied")
????????root.destroy()
?
?
####define buttons
button1?=?Button(root,?width=15,?font=('Times 16 bold'),?height=7,?command=lambda:?checker(1))
button1.grid(row=1,?column=1)
button2?=?Button(root,?width=15,?height=7,?font=('Times 16 bold'),?command=lambda:?checker(2))
button2.grid(row=1,?column=2)
button3?=?Button(root,?width=15,?height=7,?font=('Times 16 bold'),?command=lambda:?checker(3))
button3.grid(row=1,?column=3)
button4?=?Button(root,?width=15,?height=7,?font=('Times 16 bold'),?command=lambda:?checker(4))
button4.grid(row=2,?column=1)
button5?=?Button(root,?width=15,?height=7,?font=('Times 16 bold'),?command=lambda:?checker(5))
button5.grid(row=2,?column=2)
button6?=?Button(root,?width=15,?height=7,?font=('Times 16 bold'),?command=lambda:?checker(6))
button6.grid(row=2,?column=3)
button7?=?Button(root,?width=15,?height=7,?font=('Times 16 bold'),?command=lambda:?checker(7))
button7.grid(row=3,?column=1)
button8?=?Button(root,?width=15,?height=7,?font=('Times 16 bold'),?command=lambda:?checker(8))
button8.grid(row=3,?column=2)
button9?=?Button(root,?width=15,?height=7,?font=('Times 16 bold'),?command=lambda:?checker(9))
button9.grid(row=3,?column=3)
?
root.mainloop()

更多python學(xué)習(xí)視頻歡迎B站關(guān)注“千鋒教育”

【千鋒教育】Python全套視頻教程,史上最經(jīng)典(宋宋老師主講)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-716437.html

到了這里,關(guān)于一口氣用Python寫(xiě)了13個(gè)小游戲(附源碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 大手筆!微軟一口氣發(fā)布了 3 款開(kāi)發(fā)者工具。。

    大手筆!微軟一口氣發(fā)布了 3 款開(kāi)發(fā)者工具。。

    公眾號(hào)關(guān)注?“GitHubDaily” 設(shè)為 “星標(biāo)”,每天帶你逛 GitHub! 昨天我發(fā)了一篇 Build 大會(huì)相關(guān)的生產(chǎn)力產(chǎn)品,介紹了未來(lái) Windows 將集成的一系列 AI 特性,以及如何幫助人們更好的利用 AI,輔助完成各類(lèi)繁瑣的工作。 今天這是第二篇,主要講解本次 Build 大會(huì)上即將開(kāi)放的幾款

    2024年02月09日
    瀏覽(39)
  • 大手筆!吳恩達(dá)一口氣開(kāi)放了 3 個(gè) AIGC 教程。。

    大手筆!吳恩達(dá)一口氣開(kāi)放了 3 個(gè) AIGC 教程。。

    公眾號(hào)關(guān)注?“GitHubDaily” 設(shè)為 “星標(biāo)”,每天帶你逛 GitHub! 一個(gè)月前,DeepLearning.ai 創(chuàng)始人吳恩達(dá)與 OpenAI 開(kāi)發(fā)者 Iza Fulford 聯(lián)手推出了一門(mén)面向開(kāi)發(fā)者的技術(shù)教程:《 ChatGPT 提示工程 》。 該教程總共分為 9 個(gè)章節(jié),總一個(gè)多小時(shí),里面主要涵蓋:提示詞最佳實(shí)踐、評(píng)論情

    2024年02月11日
    瀏覽(14)
  • 4月更新!EasyOps?全平臺(tái)27項(xiàng)新功能一口氣來(lái)襲~

    4月更新!EasyOps?全平臺(tái)27項(xiàng)新功能一口氣來(lái)襲~

    又到了每月產(chǎn)品盤(pán)點(diǎn)時(shí)刻,27大新功能上線(xiàn)和升級(jí)優(yōu)化,設(shè)計(jì)Hyperlnsight超融合持續(xù)觀(guān)測(cè)平臺(tái)、DevOps持續(xù)交付平臺(tái)、AutoOps自動(dòng)化運(yùn)維平臺(tái)、ITSM服務(wù)平臺(tái)、公共服務(wù),在不斷的技術(shù)創(chuàng)新過(guò)程中,進(jìn)一步加速I(mǎi)T運(yùn)維效率升級(jí)。 下面和小編一起來(lái)了解本次更新詳情吧! Hyperlnsight 1)

    2023年04月27日
    瀏覽(16)
  • 一口氣整理三種不同二維碼生成的Java 接入代碼

    一口氣整理三種不同二維碼生成的Java 接入代碼

    二維碼已經(jīng)成為現(xiàn)代社會(huì)中廣泛應(yīng)用的一種工具,它們具有快速、可靠和高容量的信息傳遞能力。通過(guò)掃描二維碼,用戶(hù)可以輕松獲取網(wǎng)址、產(chǎn)品信息、支付鏈接等各種信息。 本文將介紹二維碼生成器 API 作為一種工具,并探討其功能和用法,包括普通二維碼生成、帶圖片的

    2024年02月06日
    瀏覽(21)
  • 臥剿,6萬(wàn)字!30個(gè)方向130篇!CVPR 2023 最全 AIGC 論文!一口氣讀完。

    臥剿,6萬(wàn)字!30個(gè)方向130篇!CVPR 2023 最全 AIGC 論文!一口氣讀完。

    一杯奶茶,成為 AIGC+CV 視覺(jué)前沿弄潮兒! 25個(gè)方向!CVPR 2022 GAN論文匯總 ?35個(gè)方向!ICCV 2021 最全GAN論文匯總 超110篇!CVPR 2021 最全GAN論文梳理 超100篇!CVPR 2020 最全GAN論文梳理 ? 在最新的視覺(jué)頂會(huì)?CVPR 2023?會(huì)議中,涌現(xiàn)出了大量基于 生成式AIGC 的CV論文,包括不限于 生成對(duì)抗

    2024年02月09日
    瀏覽(32)
  • 用Python寫(xiě)了一個(gè)「擁抱梅西」的小游戲

    用Python寫(xiě)了一個(gè)「擁抱梅西」的小游戲

    大家好,歡迎來(lái)到 Crossin的編程教室 !? 最近有個(gè)小伙兒因?yàn)樵诒荣愔袥_進(jìn)場(chǎng)地?fù)肀肺鞫雒恕? 這種行為當(dāng)然不可取,他也為此付出了代價(jià)。但要說(shuō)我沒(méi)有一丁點(diǎn)羨慕和佩服那是不可能的。 于是,我也尬蹭一下這個(gè)熱點(diǎn),用Python寫(xiě)了一個(gè)「擁抱梅西」的小游戲。 游戲

    2024年02月09日
    瀏覽(23)
  • 讓ChatGPT做一下MySQL 8.0 OCP(1Z0-908)的真題,我松了一口氣

    MySQL OCP分成中文和英文兩種,Oracle OCP只有英文考試,這里我們用MySQL 8.0 OCP(1Z0-908)的中文真題測(cè)試一下ChatGPT,看看ChatGPT能否獲得MySQL OCP的認(rèn)證,用這種方法判斷ChatGPT會(huì)不會(huì)代替我們?nèi)祟?lèi)DBA的工作。 1報(bào)告在MySQL服務(wù)器上運(yùn)行的所有當(dāng)前連接,ChatGPT準(zhǔn)確地列出了3個(gè): SELECT

    2024年02月04日
    瀏覽(25)
  • 又一巨頭宣布入局AIGC,一口氣開(kāi)源數(shù)個(gè)模型,還道出了它的變現(xiàn)之道

    又一巨頭宣布入局AIGC,一口氣開(kāi)源數(shù)個(gè)模型,還道出了它的變現(xiàn)之道

    金磊 發(fā)自 凹非寺 量子位 | 公眾號(hào) QbitAI AIGC (AI生成內(nèi)容),這個(gè)概念在今年可以說(shuō)是火得一塌糊涂。 例如Stable Diffusion,只要對(duì)它說(shuō)一句話(huà),“唰唰唰”地就能秒生成畫(huà)作。 再如最近大火的ChatGPT,對(duì)答如流堪比人類(lèi),簡(jiǎn)直讓網(wǎng)友們玩得不亦樂(lè)乎。 △ 左:Stable Diffusion作畫(huà);

    2024年02月10日
    瀏覽(21)
  • 【萬(wàn)字詳細(xì)教程】Linux to go——裝在移動(dòng)硬盤(pán)里的Linux系統(tǒng)(Ubuntu22.04)制作流程;一口氣解決系統(tǒng)安裝/引導(dǎo)文件遷移/顯卡驅(qū)動(dòng)安裝等問(wèn)題

    【萬(wàn)字詳細(xì)教程】Linux to go——裝在移動(dòng)硬盤(pán)里的Linux系統(tǒng)(Ubuntu22.04)制作流程;一口氣解決系統(tǒng)安裝/引導(dǎo)文件遷移/顯卡驅(qū)動(dòng)安裝等問(wèn)題

    如果不想看前面的廢話(huà)??,請(qǐng)?zhí)D(zhuǎn)到 1.準(zhǔn)備工具 處開(kāi)始閱讀。 制作基于PSSD的Linux to go系統(tǒng)是我很早就打算做的事情,但這畢竟不是常規(guī)的裝系統(tǒng),因此在這之前我也調(diào)研了許多經(jīng)驗(yàn)貼,不過(guò)我的思路是找到一個(gè)看起來(lái)最靠譜而且步驟相對(duì)簡(jiǎn)單的帖子,然后一路跟著走下去。

    2024年02月22日
    瀏覽(283)
  • 邊玩邊學(xué),13個(gè)Python小游戲(含源碼)

    邊玩邊學(xué),13個(gè)Python小游戲(含源碼)

    經(jīng)常聽(tīng)到有朋友說(shuō),學(xué)習(xí)編程是一件非常枯燥無(wú)味的事情。其實(shí),大家有沒(méi)有認(rèn)真想過(guò),可能是我們的學(xué)習(xí)方法不對(duì)? 比方說(shuō),你有沒(méi)有想過(guò),可以通過(guò)打游戲來(lái)學(xué)編程? 今天我想跟大家分享幾個(gè)Python小游戲,教你如何通過(guò)邊打游戲邊學(xué)編程! 源碼分享: ? 源碼分享: ?

    2024年02月07日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包