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

用python制作簡單的小游戲,用python設計一個小游戲

這篇具有很好參考價值的文章主要介紹了用python制作簡單的小游戲,用python設計一個小游戲。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

這篇文章主要介紹了python編寫小游戲詳細教程,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲,下面讓小編帶著大家一起了解一下。

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能

Source code download: 本文相關源碼

今天給大家?guī)硎鍌€Python小游戲,找回童年的同時學習編程還可以摸魚,源碼附上結尾領取。

一、接金幣(1分)

普通難度:?

玩法介紹: 吃金幣,控制左右鍵,有手就行python學生作品。

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?

源碼分享

import os
import cfg
import sys
import pygame
import random
from modules import *


'''游戲初始化'''
def initGame():
    # 初始化pygame, 設置展示窗口
    pygame.init()
    screen = pygame.display.set_mode(cfg.SCREENSIZE)
    pygame.display.set_caption('catch coins —— ')
    # 加載必要的游戲素材
    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()
    # 播放背景音樂
    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
    # 當前分數(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))
        # --倒計時信息
        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)
        # --按鍵檢測
        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')
        # --隨機生成食物
        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)
        # --碰撞檢測
        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
        # --畫hero
        hero.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)
        # --判斷游戲是否結束
        if pygame.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()
    return showEndGameInterface(screen, cfg, score, highest_score)


'''run'''
if __name__ == '__main__':
    while main():
        pass

二、滑雪 (1分)

普通難度:?

玩法介紹: 滑雪吃小旗子,控制上下左右鍵,關鍵控制好速度,有手就行。

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?

源碼分享

import sys
import cfg
import pygame
import random


'''滑雪者類'''
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]
    '''改變滑雪者的朝向. 負數(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
    '''移動滑雪者'''
    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)
    '''設置為摔倒狀態(tài)'''
    def setFall(self):
        self.image = pygame.image.load(cfg.SKIER_IMAGE_PATHS[-1])
    '''設置為站立狀態(tài)'''
    def setForward(self):
        self.direction = 0
        self.image = pygame.image.load(self.imagepaths[self.direction])


'''
Function:
    障礙物類
Input:
    img_path: 障礙物圖片路徑
    location: 障礙物位置
    attribute: 障礙物類別屬性
'''
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
    '''移動'''
    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


'''顯示游戲開始界面'''
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'按任意鍵開始游戲', 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()


'''顯示分數(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)


'''更新當前幀的游戲畫面'''
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)
    # 設置屏幕
    screen = pygame.display.set_mode(cfg.SCREENSIZE)
    pygame.display.set_caption('滑雪游戲 —— 九歌')
    # 游戲開始界面
    ShowStartInterface(screen, cfg.SCREENSIZE)
    # 實例化游戲精靈
    # --滑雪者
    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
    # 記錄當前的分數(shù)
    score = 0
    # 記錄當前的速度
    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)
        # --更新當前游戲幀的數(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)
        # --碰撞檢測
        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()

三、乒乓球 (1分)

普通難度:?

玩法介紹: 雙人小游戲,可以選擇單打或者雙打,有手就行。

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?

源碼分享

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:
    開始界面
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()


'''結束界面'''
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()


'''運行游戲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)
    # 開始界面
    game_mode = startInterface(screen)
    # 游戲主循環(huán)
    # --左邊球拍(ws控制, 僅雙人模式時可控制)
    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)
        # 球運動
        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))
        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 —— 九歌')
    # 開始游戲
    while True:
        score_left, score_right = runDemo(screen)
        endInterface(screen, score_left, score_right)


'''run'''
if __name__ == '__main__':
    main()

四、俄羅斯方塊 (2分)

困難難度:??

玩法介紹: 小時候的經(jīng)典游戲,加速玩法有一點點難度。

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?

源碼分享

import os
import sys
import random
from modules import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *


'''定義俄羅斯方塊游戲類'''
class TetrisGame(QMainWindow):
    def __init__(self, parent=None):
        super(TetrisGame, self).__init__(parent)
        # 是否暫停ing
        self.is_paused = False
        # 是否開始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()
        # 焦點
        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())
    '''游戲界面移動到屏幕中間'''
    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()
    '''開始'''
    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()
    '''計時器事件'''
    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()
        # 旋轉
        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_())

五、消消樂(2分)

困難難度:??

玩法介紹: 以前經(jīng)典的游戲,給我感覺趣味性少了點

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?

源碼分享

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 —— 九歌')
    # 加載背景音樂
    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
        # 一輪游戲結束后玩家選擇重玩或者退出
        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()

六、飛機大戰(zhàn)(2分)

困難難度:??

玩法介紹: 并夕夕版飛機大戰(zhàn),也是個雙人小游戲。

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?

七、保衛(wèi)森林(3分)

抓狂難度:???

玩法介紹: 塔防類小游戲,老白喜歡玩的一類,比較考驗策略和大局安排。

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能

八、24點游戲(3分)

抓狂難度:???

玩法介紹: 幾個數(shù)字通過加減乘除最后結果為24,老白開始覺得很簡單,后面越玩越覺得有點意思。

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?

九、外星人入侵(3分)

抓狂難度:???

玩法介紹: 打怪走位都要控制好,還是考驗操作的。

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?

十、坦克大戰(zhàn)(3分)

抓狂難度:???

玩法介紹: 強烈推薦,童年系列來了,太好玩了,現(xiàn)在玩也不覺得過時,雙人玩美滋滋。

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?

十一、吃豆豆(4分)

惡夢難度:????

玩法介紹: 這個很考驗走位啊,一不小心就沒了。

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?

十二、推箱子(4分)

惡夢難度:????

玩法介紹: 小時候拿著大人的手機玩這個,越到后面越玩,有通過的大佬嗎?

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?

十三、2048(4分)

惡夢難度:????

玩法介紹: 也是一款經(jīng)典的游戲,前面還好,越到后面越難。

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?

十四、塔防(5分)

地獄難度:?????

玩法介紹: 大家到的我可沒加速,就是這么快,堅持三分鐘就不容易了。

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?

十五、拼圖(5分)

地獄難度:?????

玩法介紹: 這個拼圖我認為在這個十五個里算是最難的,真的很難拼!

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能

這里給大家分享一份Python全套學習資料,包括學習路線、軟件、源碼、視頻、面試題等等,都是我自己學習時整理的,希望可以對正在學習或者想要學習Python的朋友有幫助!

CSDN大禮包:全網(wǎng)最全《全套Python學習資料》免費分享??

??有需要的小伙伴,可以點擊下方鏈接免費領取或者V掃描下方二維碼免費領取??

??CSDN大禮包??:全網(wǎng)最全《Python學習資料》免費分享(安全鏈接,放心點擊)??

?用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能

1??零基礎入門

① 學習路線

對于從來沒有接觸過Python的同學,我們幫你準備了詳細的學習成長路線圖。可以說是最科學最系統(tǒng)的學習路線,你可以按照上面的知識點去找對應的學習資源,保證自己學得較為全面。
用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能

② 路線對應學習視頻

還有很多適合0基礎入門的學習視頻,有了這些視頻,輕輕松松上手Python~用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能

③練習題

每節(jié)視頻課后,都有對應的練習題哦,可以檢驗學習成果哈哈!
用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能
因篇幅有限,僅展示部分資料

2??國內(nèi)外Python書籍、文檔

① 文檔和書籍資料

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能

3??Python工具包+項目源碼合集

①Python工具包

學習Python常用的開發(fā)軟件都在這里了!每個都有詳細的安裝教程,保證你可以安裝成功哦!
用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能

②Python實戰(zhàn)案例

光學理論是沒用的,要學會跟著一起敲代碼,動手實操,才能將自己的所學運用到實際當中去,這時候可以搞點實戰(zhàn)案例來學習。100+實戰(zhàn)案例源碼等你來拿!
用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能

③Python小游戲源碼

如果覺得上面的實戰(zhàn)案例有點枯燥,可以試試自己用Python編寫小游戲,讓你的學習過程中增添一點趣味!
用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能

4??Python面試題

我們學會了Python之后,有了技能就可以出去找工作啦!下面這些面試題是都來自阿里、騰訊、字節(jié)等一線互聯(lián)網(wǎng)大廠,并且有阿里大佬給出了權威的解答,刷完這一套面試資料相信大家都能找到滿意的工作。
用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能
用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能

5??Python兼職渠道

而且學會Python以后,還可以在各大兼職平臺接單賺錢,各種兼職渠道+兼職注意事項+如何和客戶溝通,我都整理成文檔了。
用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能
用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能
上述所有資料 ?? ,朋友們?nèi)绻行枰???《全套Python學習資料》的,可以掃描下方二維碼免費領取 ??
??有需要的小伙伴,可以點擊下方鏈接免費領取或者V掃描下方二維碼免費領取??

??CSDN大禮包??:全網(wǎng)最全《Python學習資料》免費分享(安全鏈接,放心點擊)??

?用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?文章來源地址http://www.zghlxwxcb.cn/news/detail-840466.html

今天給大家?guī)硎鍌€Python小游戲,找回童年的同時學習編程還可以摸魚,源碼附上結尾領取。

一、接金幣(1分)

普通難度:?

玩法介紹: 吃金幣,控制左右鍵,有手就行python學生作品。

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?

源碼分享

import os
import cfg
import sys
import pygame
import random
from modules import *


'''游戲初始化'''
def initGame():
    # 初始化pygame, 設置展示窗口
    pygame.init()
    screen = pygame.display.set_mode(cfg.SCREENSIZE)
    pygame.display.set_caption('catch coins —— ')
    # 加載必要的游戲素材
    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()
    # 播放背景音樂
    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
    # 當前分數(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))
        # --倒計時信息
        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)
        # --按鍵檢測
        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')
        # --隨機生成食物
        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)
        # --碰撞檢測
        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
        # --畫hero
        hero.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)
        # --判斷游戲是否結束
        if pygame.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()
    return showEndGameInterface(screen, cfg, score, highest_score)


'''run'''
if __name__ == '__main__':
    while main():
        pass

二、滑雪 (1分)

普通難度:?

玩法介紹: 滑雪吃小旗子,控制上下左右鍵,關鍵控制好速度,有手就行。

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?

源碼分享

import sys
import cfg
import pygame
import random


'''滑雪者類'''
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]
    '''改變滑雪者的朝向. 負數(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
    '''移動滑雪者'''
    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)
    '''設置為摔倒狀態(tài)'''
    def setFall(self):
        self.image = pygame.image.load(cfg.SKIER_IMAGE_PATHS[-1])
    '''設置為站立狀態(tài)'''
    def setForward(self):
        self.direction = 0
        self.image = pygame.image.load(self.imagepaths[self.direction])


'''
Function:
    障礙物類
Input:
    img_path: 障礙物圖片路徑
    location: 障礙物位置
    attribute: 障礙物類別屬性
'''
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
    '''移動'''
    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


'''顯示游戲開始界面'''
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'按任意鍵開始游戲', 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()


'''顯示分數(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)


'''更新當前幀的游戲畫面'''
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)
    # 設置屏幕
    screen = pygame.display.set_mode(cfg.SCREENSIZE)
    pygame.display.set_caption('滑雪游戲 —— 九歌')
    # 游戲開始界面
    ShowStartInterface(screen, cfg.SCREENSIZE)
    # 實例化游戲精靈
    # --滑雪者
    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
    # 記錄當前的分數(shù)
    score = 0
    # 記錄當前的速度
    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)
        # --更新當前游戲幀的數(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)
        # --碰撞檢測
        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()

三、乒乓球 (1分)

普通難度:?

玩法介紹: 雙人小游戲,可以選擇單打或者雙打,有手就行。

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?

源碼分享

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:
    開始界面
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()


'''結束界面'''
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()


'''運行游戲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)
    # 開始界面
    game_mode = startInterface(screen)
    # 游戲主循環(huán)
    # --左邊球拍(ws控制, 僅雙人模式時可控制)
    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)
        # 球運動
        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))
        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 —— 九歌')
    # 開始游戲
    while True:
        score_left, score_right = runDemo(screen)
        endInterface(screen, score_left, score_right)


'''run'''
if __name__ == '__main__':
    main()

四、俄羅斯方塊 (2分)

困難難度:??

玩法介紹: 小時候的經(jīng)典游戲,加速玩法有一點點難度。

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?

源碼分享

import os
import sys
import random
from modules import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *


'''定義俄羅斯方塊游戲類'''
class TetrisGame(QMainWindow):
    def __init__(self, parent=None):
        super(TetrisGame, self).__init__(parent)
        # 是否暫停ing
        self.is_paused = False
        # 是否開始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()
        # 焦點
        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())
    '''游戲界面移動到屏幕中間'''
    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()
    '''開始'''
    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()
    '''計時器事件'''
    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()
        # 旋轉
        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_())

五、消消樂(2分)

困難難度:??

玩法介紹: 以前經(jīng)典的游戲,給我感覺趣味性少了點

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?

源碼分享

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 —— 九歌')
    # 加載背景音樂
    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
        # 一輪游戲結束后玩家選擇重玩或者退出
        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()

六、飛機大戰(zhàn)(2分)

困難難度:??

玩法介紹: 并夕夕版飛機大戰(zhàn),也是個雙人小游戲。

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?

七、保衛(wèi)森林(3分)

抓狂難度:???

玩法介紹: 塔防類小游戲,老白喜歡玩的一類,比較考驗策略和大局安排。

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能

八、24點游戲(3分)

抓狂難度:???

玩法介紹: 幾個數(shù)字通過加減乘除最后結果為24,老白開始覺得很簡單,后面越玩越覺得有點意思。

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?

九、外星人入侵(3分)

抓狂難度:???

玩法介紹: 打怪走位都要控制好,還是考驗操作的。

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?

十、坦克大戰(zhàn)(3分)

抓狂難度:???

玩法介紹: 強烈推薦,童年系列來了,太好玩了,現(xiàn)在玩也不覺得過時,雙人玩美滋滋。

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?

十一、吃豆豆(4分)

惡夢難度:????

玩法介紹: 這個很考驗走位啊,一不小心就沒了。

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?

十二、推箱子(4分)

惡夢難度:????

玩法介紹: 小時候拿著大人的手機玩這個,越到后面越玩,有通過的大佬嗎?

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?

十三、2048(4分)

惡夢難度:????

玩法介紹: 也是一款經(jīng)典的游戲,前面還好,越到后面越難。

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?

十四、塔防(5分)

地獄難度:?????

玩法介紹: 大家到的我可沒加速,就是這么快,堅持三分鐘就不容易了。

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?

十五、拼圖(5分)

地獄難度:?????

玩法介紹: 這個拼圖我認為在這個十五個里算是最難的,真的很難拼!

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能

這里給大家分享一份Python全套學習資料,包括學習路線、軟件、源碼、視頻、面試題等等,都是我自己學習時整理的,希望可以對正在學習或者想要學習Python的朋友有幫助!

CSDN大禮包:全網(wǎng)最全《全套Python學習資料》免費分享??

??有需要的小伙伴,可以點擊下方鏈接免費領取或者V掃描下方二維碼免費領取??

??CSDN大禮包??:全網(wǎng)最全《Python學習資料》免費分享(安全鏈接,放心點擊)??

?用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能

1??零基礎入門

① 學習路線

對于從來沒有接觸過Python的同學,我們幫你準備了詳細的學習成長路線圖??梢哉f是最科學最系統(tǒng)的學習路線,你可以按照上面的知識點去找對應的學習資源,保證自己學得較為全面。
用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能

② 路線對應學習視頻

還有很多適合0基礎入門的學習視頻,有了這些視頻,輕輕松松上手Python~用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能

③練習題

每節(jié)視頻課后,都有對應的練習題哦,可以檢驗學習成果哈哈!
用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能
因篇幅有限,僅展示部分資料

2??國內(nèi)外Python書籍、文檔

① 文檔和書籍資料

用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能

3??Python工具包+項目源碼合集

①Python工具包

學習Python常用的開發(fā)軟件都在這里了!每個都有詳細的安裝教程,保證你可以安裝成功哦!
用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能

②Python實戰(zhàn)案例

光學理論是沒用的,要學會跟著一起敲代碼,動手實操,才能將自己的所學運用到實際當中去,這時候可以搞點實戰(zhàn)案例來學習。100+實戰(zhàn)案例源碼等你來拿!
用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能

③Python小游戲源碼

如果覺得上面的實戰(zhàn)案例有點枯燥,可以試試自己用Python編寫小游戲,讓你的學習過程中增添一點趣味!
用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能

4??Python面試題

我們學會了Python之后,有了技能就可以出去找工作啦!下面這些面試題是都來自阿里、騰訊、字節(jié)等一線互聯(lián)網(wǎng)大廠,并且有阿里大佬給出了權威的解答,刷完這一套面試資料相信大家都能找到滿意的工作。
用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能
用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能

5??Python兼職渠道

而且學會Python以后,還可以在各大兼職平臺接單賺錢,各種兼職渠道+兼職注意事項+如何和客戶溝通,我都整理成文檔了。
用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能
用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能
上述所有資料 ?? ,朋友們?nèi)绻行枰???《全套Python學習資料》的,可以掃描下方二維碼免費領取 ??
??有需要的小伙伴,可以點擊下方鏈接免費領取或者V掃描下方二維碼免費領取??

??CSDN大禮包??:全網(wǎng)最全《Python學習資料》免費分享(安全鏈接,放心點擊)??

?用python制作簡單的小游戲,用python設計一個小游戲,pygame,python,開發(fā)語言,人工智能?

到了這里,關于用python制作簡單的小游戲,用python設計一個小游戲的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • 帶你用Python制作一個經(jīng)典小游戲:掃雷

    名字:阿玥的小東東 學習:Python、C/C++ 主頁鏈接:阿玥的小東東的博客_CSDN博客-pythonc++高級知識,過年必備,C/C++知識講解領域博主 目錄 游戲界面尺寸 方塊尺寸 雷的數(shù)量

    2024年02月11日
    瀏覽(27)
  • 用python做簡單的小游戲,用python寫一個小游戲

    用python做簡單的小游戲,用python寫一個小游戲

    大家好,給大家分享一下初學者怎么用python寫簡單小游戲視頻,很多人還不知道這一點。下面詳細解釋一下?,F(xiàn)在讓我們來看看! Python非常受歡迎的一個原因是它的應用領域非常廣泛,其中就包括游戲開發(fā)。而是用Python進行游戲開發(fā)的首選模塊就是PyGamePython簡單代碼畫愛心。

    2024年02月20日
    瀏覽(26)
  • chatgpt賦能python:Python簡單小游戲制作教程——讓你學會編寫游戲代碼

    Python是一種高級編程語言,越來越受歡迎,因為它易于學習和使用,而且靈活性非常高。在這篇文章中,我們將教你如何用Python編寫一個簡單的小游戲。讓我們開始吧! 在編寫代碼之前,你需要安裝以下工具: Python編程語言 Pygame游戲框架 步驟一:設置游戲場景 首先,你需

    2024年02月11日
    瀏覽(23)
  • python編寫一個簡單的游戲,用python做簡單的小游戲

    python編寫一個簡單的游戲,用python做簡單的小游戲

    大家好,小編來為大家解答以下問題,如何用python編寫一個簡單的小游戲,python編寫一個簡單的游戲,現(xiàn)在讓我們一起來看看吧! 嗨害大家好鴨,我是小熊貓?? 很多小伙伴后臺私信問我說, “python可以做游戲嗎 ?” “要怎么做呢?” 接下來我就介紹一下, 如何用Python做

    2024年02月03日
    瀏覽(21)
  • python編寫一個簡單的游戲,python編寫小游戲的代碼

    python編寫一個簡單的游戲,python編寫小游戲的代碼

    大家好,本文將圍繞如何用python編寫一個簡單的小游戲展開說明,用python做一個小游戲代碼是一個很多人都想弄明白的事情,想搞清楚python編寫小游戲詳細教程需要先了解以下幾個事情。 今天玩點別的吧都說 Python 除了生孩子什么都能干 咱們今天就用 Python 寫個小游戲 貪吃蛇

    2024年02月02日
    瀏覽(28)
  • python制作簡單版天天酷跑,是不是你平日里摸魚小游戲呀

    python制作簡單版天天酷跑,是不是你平日里摸魚小游戲呀

    前言 嗨嘍,大家好呀~這里是愛看美女的茜茜吶 天天酷跑是一款輕松好玩、簡單時尚的跑酷類手機游戲。 那我們能不能用python模擬出這個一個游戲呢? 答案當然是可以的,今天我就給大家?guī)砗喴装娴奶焯炜崤苄∮螒?開發(fā)環(huán)境: 版 本: python 3.8 編輯器:pycharm 2021.2 準備事

    2024年02月04日
    瀏覽(24)
  • pygame飛機大戰(zhàn)小游戲(python大作業(yè))

    pygame飛機大戰(zhàn)小游戲(python大作業(yè))

    ? python大作業(yè),在查看了老師給的鏈接發(fā)現(xiàn)教學視頻不完整,所以借用了同學的《Python編程 從入門到實踐》中的一個項目,學習模仿。 二、游戲具體介紹 這是一款由輝輝親自打造的太空對戰(zhàn)小游戲。 游戲背景:在廣袤無垠的太空里有一群藍精靈(不是)有一群邪惡的壞人,

    2024年02月11日
    瀏覽(31)
  • 使用Python+pygame實現(xiàn)貪吃蛇小游戲

    使用Python+pygame實現(xiàn)貪吃蛇小游戲

    使用第三方庫pygame,關于Python中pygame游戲模塊的安裝使用可見?https://blog.csdn.net/cnds123/article/details/119514520 給出兩種實現(xiàn)。 第一種 運行效果如下: 游戲源碼如下: 第二種 就不給出運行效果圖了,你可以運行看看。 下面給出另一種實現(xiàn)源碼: OK!?

    2024年01月16日
    瀏覽(55)
  • 【Python游戲】超簡單~Python實現(xiàn)植物大戰(zhàn)僵尸小游戲,可以用于做畢業(yè)設計喲 | 附源碼

    【Python游戲】超簡單~Python實現(xiàn)植物大戰(zhàn)僵尸小游戲,可以用于做畢業(yè)設計喲 | 附源碼

    hello,大家好呀~ 今天給打擊整一個植物大戰(zhàn)僵尸 無廣告版本 哈哈 現(xiàn)在的小游戲很多都是有廣告,多少有點難受 今天給大家直接安排 遇到不懂的問題也可以私信小編或者↓ ↓ ↓ 源碼. 點擊藍色字體領取喲~(備注:蘇) 有很多的資源可以白嫖的哈,不定時會更新一下Pytho

    2024年02月05日
    瀏覽(28)
  • 你的第一個微信小游戲,教你從0開始制作小游戲(一)

    你的第一個微信小游戲,教你從0開始制作小游戲(一)

    微信開放文檔 Cocos引擎_游戲開發(fā)引擎 發(fā)布流程就是先在cocos中編寫你的游戲,然后生成對應的軟件包,再到微信開發(fā)者工具上傳到微信小程序平臺。 Cocos是典型的組件節(jié)點式的開發(fā),3.x版本之前的語言是js,ts都可以。3.x版本之后就只能用ts。 Introduction · Cocos Creator使用手冊

    2024年02月12日
    瀏覽(100)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包