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

【python大作業(yè)】pygame實(shí)戰(zhàn)(python編寫2048小游戲)

這篇具有很好參考價(jià)值的文章主要介紹了【python大作業(yè)】pygame實(shí)戰(zhàn)(python編寫2048小游戲)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

本文介紹基于pygame編寫的2048小游戲程序
包含四個(gè)文件

python pygame小游戲,Python練手,python,pygame,開發(fā)語(yǔ)言運(yùn)行效果:
python pygame小游戲,Python練手,python,pygame,開發(fā)語(yǔ)言python pygame小游戲,Python練手,python,pygame,開發(fā)語(yǔ)言

點(diǎn)擊此處下載完整程序,下載即可運(yùn)行

config.py

其中config.py用于設(shè)置游戲參數(shù)
包括游戲窗口大小,刷新率,方塊顏色等

class Base:
    WINDOW_W = 700
    WINDOW_H = 550
    GAME_WH = 500
    SIZE = 4
    FPS = 60
    DEBUG = False
    COLORS = {
        '0': (205, 193, 180),
        '2': (238, 228, 218),
        '4': (237, 224, 200),
        '8': (242, 177, 121),
        '16': (245, 149, 99),
        '32': (246, 124, 95),
        '64': (246, 94, 59),
        '128': (237, 207, 114),
        '256': (237, 204, 97),
        '512': (237, 200, 80),
        '1024': (237, 197, 63),
        '2048': (255, 0, 0)
    }

game

game.py中定義了游戲?qū)崿F(xiàn)的函數(shù),設(shè)置方塊的產(chǎn)生,移動(dòng)與計(jì)算,并判斷游戲進(jìn)行的程度,判斷游戲是否完成或結(jié)束。

import random
import numpy as np
class Grid:
    size = 4
    tiles = []
    max_tile = 0
    def __init__(self, size=4):
        self.size = size
        self.score = 0
        self.tiles = np.zeros((size, size)).astype(np.int32)
    def is_zero(self, x, y):
        return self.tiles[y][x] == 0
    def is_full(self):
        return 0 not in self.tiles
    # 設(shè)置瓷磚
    def set_tiles(self, xy, number):
        self.tiles[xy[1]][xy[0]] = number
    # 獲取一個(gè)隨機(jī)的空坐標(biāo)
    def get_random_xy(self):
        if not self.is_full():
            while 1:
                x, y = random.randint(0, self.size - 1), random.randint(0, self.size - 1)
                if self.is_zero(x, y):
                    return x, y
        return -1, -1
    # 初始設(shè)置瓷磚
    def add_tile_init(self):
        self.add_random_tile()
        self.add_random_tile()
    # 添加一個(gè)隨機(jī)的瓷磚
    def add_random_tile(self):
        if not self.is_full():
            # 產(chǎn)生2的概率為0.9
            # q = 0.9
            # for i in range(1,50):
            #     if random.random() < q or i==50-1:
            #         value = 2**i
            #         break
            value = 2 if random.random() < 0.9 else 4
            self.set_tiles(self.get_random_xy(), value)
    def run(self, direction, is_fake=False):
        if isinstance(direction, int):
            direction = nmap[direction]
        self.score = 0
        if is_fake:
            t = self.tiles.copy()
        else:
            t = self.tiles
        if direction == 'U':
            for i in range(self.size):
                self.move_hl(t[:, i])
        elif direction == 'D':
            for i in range(self.size):
                self.move_hl(t[::-1, i])
        elif direction == 'L':
            for i in range(self.size):
                self.move_hl(t[i, :])
        elif direction == 'R':
            for i in range(self.size):
                self.move_hl(t[i, ::-1])
        return self.score
    # 移動(dòng)某一行或某一列
    def move_hl(self, hl):
        '''
        移動(dòng)某一行或某一列
        對(duì)于hl,從大往小移動(dòng)
        :return: 移動(dòng)后的列表
        '''
        len_hl = len(hl)
        for i in range(len_hl - 1):
            if hl[i] == 0:
                for j in range(i + 1, len_hl):
                    if hl[j] != 0:
                        hl[i] = hl[j]
                        hl[j] = 0
                        self.score += 1
                        break
            if hl[i] == 0:
                break
            for j in range(i + 1, len_hl):
                if hl[j] == hl[i]:
                    hl[i] += hl[j]
                    self.score += hl[j]
                    hl[j] = 0
                    break
                if hl[j] != 0:
                    break
        return hl
    # 判斷是否結(jié)束
    def is_over(self):
        if not self.is_full():
            return False
        for y in range(self.size - 1):
            for x in range(self.size - 1):
                if self.tiles[y][x] == self.tiles[y][x + 1] or self.tiles[y][x] == self.tiles[y + 1][x]:
                    return False
        return True
    # 判斷是否勝利
    def is_win(self):
        if self.max_tile > 0:
            return self.max_tile in self.tiles
        else:
            return False
    def __str__(self):
        str_ = '====================\n'
        for row in self.tiles:
            str_ += '-' * (5 * self.size + 1) + '\n'
            for i in row:
                str_ += '|{:4d}'.format(int(i))
            str_ += '|\n'
        str_ += '-' * (5 * self.size + 1) + '\n'
        str_ += '==================\n'
        return str_
nmap = {0: 'U', 1: 'R', 2: 'D', 3: 'L'}
fmap = dict([val, key] for key, val in nmap.items())
class Game:
    score = 0
    env = 'testing'
    state = 'start'
    grid = None

    def __init__(self, grid_size=4, env='production'):
        self.env = env
        self.grid_size = grid_size
        self.start()

    # 開始或重新開始
    def start(self):
        self.grid = Grid(self.grid_size)
        if self.env == 'production':
            self.grid.add_tile_init()
        self.state = 'run'

    # 運(yùn)行一步
    def run(self, direction):
        if self.state in ['over', 'win']:
            return None
        if isinstance(direction, int):
            direction = nmap[direction]

        self.grid.run(direction)
        self.score += self.grid.score
        if self.grid.is_over():
            self.state = 'over'
        if self.grid.is_win():
            self.state = 'win'
        # 產(chǎn)生新方塊
        if self.env == 'production':
            self.grid.add_random_tile()
        return self.grid
    def printf(self):
        print(self.grid)

main

主函數(shù),直接運(yùn)行此程序即可開始游戲。
此程序負(fù)責(zé)編輯游戲界面,獲取游戲輸入,通過判斷游戲運(yùn)行狀況與輸入指令,通過調(diào)用以編寫的函數(shù),完成游戲的運(yùn)行

config = SupperFast()
FPS = config.FPS
SIZE = config.SIZE
DEBUG = config.DEBUG
colors = config.COLORS
GAME_WH = config.GAME_WH
WINDOW_W = config.WINDOW_W
WINDOW_H = config.WINDOW_H
# 格子中的字體
font_h_w = 2 / 1
g_w = GAME_WH / SIZE * 0.9
# font = pygame.font.SysFont('microsoftyahei', 20)
class Main():
    def __init__(self):
        global FPS
        pygame.init()
        os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (100, 50)
        self.set_win_wh(WINDOW_W, WINDOW_H, title='2048')
        self.state = 'start'
        self.fps = FPS
        self.catch_n = 0
        self.clock = pygame.time.Clock()
        self.game = Game(SIZE)
        self.ai = Ai()
        self.step_time = config.STEP_TIME
        self.next_f = ''
        self.last_time = time.time()
        self.start_time = time.time()
        self.run_time = time.time() - self.start_time
        self.jm = -1
    def start(self):
        # 加載按鈕
        self.button_list = [
            Button('start', '重新開始', (GAME_WH + 50, 150)),
            Button('ai', '電腦托管', (GAME_WH + 50, 250)),
        ]
        self.run()
    def run(self):
        while self.state != 'exit':
            if self.game.state in ['over', 'win']:
                self.state = self.game.state
            self.my_event()
            if self.next_f != '' and (
                    self.state == 'run' or self.state == 'ai' and time.time() - self.last_time > self.step_time):
                self.game.run(self.next_f)
                self.next_f = ''
                self.last_time = time.time()
            elif self.state == 'start':
                self.start_time = time.time()
                self.game.start()
                self.state = 'run'
            self.set_bg((101, 194, 148))
            self.draw_info()
            self.draw_button(self.button_list)
            self.draw_map()
            self.draw_time()
            self.update()
        print('退出游戲')
    def draw_time(self):
        if self.state!='over' and self.state!='win':
            self.run_time = time.time()-self.start_time
        self.draw_text('游戲時(shí)間:{}分{}秒'.format(int(self.run_time/60),int(self.run_time%60)), (GAME_WH + 10, 10))
    def draw_map(self):
        for y in range(SIZE):
            for x in range(SIZE):
                self.draw_block((x, y), self.game.grid.tiles[y][x])
        if self.state == 'over':
            pygame.draw.rect(self.screen, (0, 0, 0, 0.5),
                             (0, 0, GAME_WH, GAME_WH))
            self.draw_text('游戲結(jié)束!', (GAME_WH / 2, GAME_WH / 2), size=25, center='center')
        elif self.state == 'win':
            pygame.draw.rect(self.screen, (0, 0, 0, 0.5),
                             (0, 0, GAME_WH, GAME_WH))
            self.draw_text('勝利!', (GAME_WH / 2, GAME_WH / 2), size=25, center='center')

    # 畫一個(gè)方格
    def draw_block(self, xy, number):
        one_size = GAME_WH / SIZE
        dx = one_size * 0.05
        x, y = xy[0] * one_size, xy[1] * one_size
        # print(colors[str(int(number))])
        color = colors[str(int(number))] if number <= 2048 else (0, 0, 255)
        pygame.draw.rect(self.screen, color,
                         (x + dx, y + dx, one_size - 2 * dx, one_size - 2 * dx))
        color = (20, 20, 20) if number <= 4 else (250, 250, 250)
        if number != 0:
            ln = len(str(number))
            if ln == 1:
                size = one_size * 1.2 / 2
            elif ln <= 3:
                size = one_size * 1.2 / ln
            else:
                size = one_size * 1.5 / ln
            self.draw_text(str(int(number)), (x + one_size * 0.5, y + one_size * 0.5 - size / 2), color, size, 'center')

    def draw_info(self):
        self.draw_text('分?jǐn)?shù):{}'.format(self.game.score), (GAME_WH + 50, 40))
        if self.state == 'ai':
            self.draw_text('間隔:{}'.format(self.step_time), (GAME_WH + 50, 60))
            self.draw_text('評(píng)分:{}'.format(self.jm), (GAME_WH + 50, 80))
    def set_bg(self, color=(255, 255, 255)):
        self.screen.fill(color)
    def catch(self, filename=None):
        if filename is None:
            filename = "./catch/catch-{:04d}.png".format(self.catch_n)
        pygame.image.save(self.screen, filename)
        self.catch_n += 1
    def draw_button(self, buttons):
        for b in buttons:
            if b.is_show:
                pygame.draw.rect(self.screen, (180, 180, 200),
                                 (b.x, b.y, b.w, b.h))
                self.draw_text(b.text, (b.x + b.w / 2, b.y + 9), size=18, center='center')
    def draw_text(self, text, xy, color=(0, 0, 0), size=18, center=None):
        font = pygame.font.SysFont('simhei', round(size))
        text_obj = font.render(text, 1, color)
        text_rect = text_obj.get_rect()
        if center == 'center':
            text_rect.move_ip(xy[0] - text_rect.w // 2, xy[1])
        else:
            text_rect.move_ip(xy[0], xy[1])
        # print('畫文字:',text,text_rect)
        self.screen.blit(text_obj, text_rect)
    # 設(shè)置窗口大小
    def set_win_wh(self, w, h, title='python游戲'):
        self.screen2 = pygame.display.set_mode((w, h), pygame.DOUBLEBUF, 32)
        self.screen = self.screen2.convert_alpha()
        pygame.display.set_caption(title)
    def update(self):
        self.screen2.blit(self.screen, (0, 0))
        # 刷新畫面
        # pygame.display.update()
        pygame.display.flip()
        time_passed = self.clock.tick(self.fps)
    # 偵聽事件
    def my_event(self):
        if self.state == 'ai' and self.next_f == '':
            self.next_f, self.jm = self.ai.get_next(self.game.grid.tiles)
        for event in pygame.event.get():
            if event.type == QUIT:
                self.state = 'exit'
            if event.type == KEYDOWN:
                if event.key == K_ESCAPE:
                    self.state = 'exit'
                elif event.key in [K_LEFT, K_a] and self.state == 'run':
                    self.next_f = 'L'
                elif event.key in [K_RIGHT, K_d] and self.state == 'run':
                    self.next_f = 'R'
                elif event.key in [K_DOWN, K_s] and self.state == 'run':
                    self.next_f = 'D'
                elif event.key in [K_UP, K_w] and self.state == 'run':
                    self.next_f = 'U'
                elif event.key in [K_k, K_l] and self.state == 'ai':
                    if event.key == K_k and self.step_time > 0:
                        self.step_time *= 0.9
                    if event.key == K_l and self.step_time < 10:
                        if self.step_time != 0:
                            self.step_time *= 1.1
                        else:
                            self.step_time = 0.01
                    if self.step_time < 0:
                        self.step_time = 0
            if event.type == MOUSEBUTTONDOWN:
                for i in self.button_list:
                    if i.is_click(event.pos):
                        self.state = i.name
                        if i.name == 'ai':
                            i.name = 'run'
                            i.text = '取消托管'
                        elif i.name == 'run':
                            i.name = 'ai'
                            i.text = '電腦托管'
                        break
def run():
    Main().start()
# 按鈕類
class Button(pygame.sprite.Sprite):
    def __init__(self, name, text, xy, size=(100, 50)):
        pygame.sprite.Sprite.__init__(self)
        self.name = name
        self.text = text
        self.x, self.y = xy[0], xy[1]
        self.w, self.h = size
        self.is_show = True

    def is_click(self, xy):
        return (self.is_show and
                self.x <= xy[0] <= self.x + self.w and
                self.y <= xy[1] <= self.y + self.h)

ai

自動(dòng)游戲模塊,即托管。此部分根據(jù)進(jìn)行上下左右操作后形成的局面進(jìn)行評(píng)分,評(píng)分依賴數(shù)字的位置,通常,大數(shù)字越靠近右下角,評(píng)分越高。該程序會(huì)選擇評(píng)分更高的操作。
該部分不是很智能,很多情況下不能自主完成游戲。

def get_grid(tiles, directions):
    g = Grid(config.SIZE)
    g.tiles = tiles.copy()
    for direction in directions:
        g.run(direction)
        g.add_random_tile()
    return g.tiles
def printf(tiles):
    for row in tiles:
        for i in row:
            print("{:^6}".format(i), end='')
        print()
def my_log2(z):
    if z == 0:
        return 0
    else:
        return z
        # return np.math.log2(z)
class Ai:
    def __init__(self):
        self.g = Grid(config.SIZE)
    def get_next(self, tiles):
        score_list = []
        tn = self.get_tile_num(tiles)
        if tn >= self.g.size ** 2 / 3:
            return "RD"[np.random.randint(0, 2)], 0
        kn = min(max(tn ** 2, 20), 40)
        for directions in itertools.product("ULRD", repeat=3):
            fen = []
            for i in range(kn):
                t_g = get_grid(tiles, directions)
                fen.append(self.get_score(t_g))
            print(directions, min(fen))
            score_list.append([directions, min(fen)])
        score_list = sorted(score_list, key=(lambda x: [x[1]]))
        # print(score_list)
        for d in score_list[::-1]:
            self.g.tiles = tiles.copy()
            if self.g.run(d[0][0], is_fake=False) != 0:
                return d[0][0], d[1] / kn
        self.g.tiles = tiles.copy()
        # print('===',score_list[-1][0][0])
        return score_list[-1][0][0], score_list[-1][1] / kn
    def get_score(self, tiles):
        # 格子數(shù)量(越少越好)  金角銀邊()
        # bjs = [self.get_bj2(tiles)[i] * 2.8 + self.get_bj(tiles)[i] for i in range(4)]
        # return max(bjs)
        a = self.get_bj2__4(tiles)
        b = self.get_bj__4(tiles)
        print(a, b)
        return a * 2.8 + b
    def debug(self, tiles):
        print('\n=======開始判斷========')
        print('移動(dòng)前棋盤:')
        printf(tiles)
        score_list = []
        for directions in itertools.product("ULRD", repeat=2):
            t_g = get_grid(tiles, directions)
            fen = self.get_score(t_g)
            score_list.append([directions, fen])
            print('==={}=={}=='.format(directions, fen))
            printf(t_g)
        score_list = sorted(score_list, key=(lambda x: [x[1]]))
        # print(score_list)
        for d in score_list[::-1]:
            # print('-->',d)
            self.g.tiles = tiles.copy()
            # print(self.g.run(d[0][0],is_fake=True))
            if self.g.run(d[0][0], is_fake=True) != 0:
                # print('---異動(dòng)前:')
                # print(self.g.tiles)
                # print('---異動(dòng)后:')
                self.g.run(d[0][0])
                # print(self.g.tiles)
                return d[0][0]
        # print('===',score_list[-1][0][0])
        return score_list[-1][0][0]

    # 空格子數(shù)量
    def get_tile_num(self, tiles):
        # l = len(tiles)
        n = 0
        for row in tiles:
            for i in row:
                if i == 0:
                    n += 1
        return n
        # return np.bincount(tiles)[0]
    def get_bj(self, tiles):
        gjs = [
            self.get_bj__1(tiles),
            self.get_bj__2(tiles),
            self.get_bj__3(tiles),
            self.get_bj__4(tiles)
        ]
        return gjs
    def get_bj__4(self, tiles):
        bj = 0
        l = len(tiles)
        size = self.g.size - 1
        for y in range(l):
            for x in range(l):
                z = tiles[y][x]
                if z != 0:
                    z_log = z - 2
                    bj += z_log * (x + y - (size * 2 - 1))
                else:
                    bj += (100 - 20 * (x + y - (size * 2 - 1)))
                # print(z, "-- ", bj)
        return bj
    def get_bj__3(self, tiles):
        bj = 0
        l = len(tiles)
        size = self.g.size - 1
        for y in range(l):
            for x in range(l):
                z = tiles[y][x]
                if z != 0:
                    z_log = z - 2
                    bj += z_log * ((size - x) + y - (size * 2 - 1))
                else:
                    bj += (100 - 20 * ((size - x) + y - (size * 2 - 1)))
        return bj
    def get_bj__2(self, tiles):
        bj = 0
        l = len(tiles)
        size = self.g.size - 1
        for y in range(l):
            for x in range(l):
                z = tiles[y][x]
                if z != 0:
                    z_log = z - 2
                    bj += z_log * ((size - x) + (size - y) - (size * 2 - 1))
                else:
                    bj += (100 - 20 * ((size - x) + (size - y) - (size * 2 - 1)))
        return bj

    def get_bj__1(self, tiles):
        bj = 0
        l = len(tiles)
        size = self.g.size - 1
        for y in range(l):
            for x in range(l):
                z = tiles[y][x]
                if z != 0:
                    z_log = z - 2
                    bj += z_log * (x + (size - y) - (size * 2 - 1))
                else:
                    bj += (100 - 20 * (x + (size - y) - (size * 2 - 1)))
        return bj
    def get_bj2(self, tiles):
        gjs = [
            self.get_bj2__1(tiles),
            self.get_bj2__2(tiles),
            self.get_bj2__3(tiles),
            self.get_bj2__4(tiles)
        ]
        return gjs
    def get_bj2__1(self, tiles):
        bj = 0
        l = len(tiles)
        for y in range(0, l - 1, 1):
            for x in range(l - 1, 0, -1):
                z = tiles[y][x]
                if tiles[y][x] < tiles[y][x - 1]:
                    bj -= abs(my_log2(tiles[y][x - 1]) - z)
                if tiles[y][x] < tiles[y + 1][x]:
                    bj -= abs(my_log2(tiles[y + 1][x]) - z)
                if tiles[y][x] < tiles[y + 1][x - 1]:
                    bj -= abs(my_log2(tiles[y + 1][x - 1]) - z)
        return bj
    def get_bj2__2(self, tiles):
        bj = 0
        l = len(tiles)
        for y in range(0, l - 1):
            for x in range(0, l - 1):
                z = tiles[y][x]
                if tiles[y][x] < tiles[y][x + 1]:
                    bj -= abs(my_log2(tiles[y][x + 1]) - z)
                if tiles[y][x] < tiles[y + 1][x]:
                    bj -= abs(my_log2(tiles[y + 1][x]) - z)
                if tiles[y][x] < tiles[y + 1][x + 1]:
                    bj -= abs(my_log2(tiles[y + 1][x + 1]) - z)
        return bj
    def get_bj2__3(self, tiles):
        bj = 0
        l = len(tiles)
        for y in range(l - 1, 0, -1):
            for x in range(0, l - 1):
                z = tiles[y][x]
                if tiles[y][x] < tiles[y][x + 1]:
                    bj -= abs(my_log2(tiles[y][x + 1]) - z)
                if tiles[y][x] < tiles[y - 1][x]:
                    bj -= abs(my_log2(tiles[y - 1][x]) - z)
                if tiles[y][x] < tiles[y - 1][x + 1]:
                    bj -= abs(my_log2(tiles[y - 1][x + 1]) - z)
        return bj

    def get_bj2__4(self, tiles):
        bj = 0
        l = len(tiles)
        for y in range(l - 1, 0, -1):
            for x in range(l - 1, 0, -1):
                z = tiles[y][x]
                if z < tiles[y][x - 1]:
                    bj -= abs(my_log2(tiles[y][x - 1]) - z)
                if z < tiles[y - 1][x]:
                    bj -= abs(my_log2(tiles[y - 1][x]) - z)
                if z < tiles[y - 1][x - 1]:
                    bj -= abs(my_log2(tiles[y - 1][x - 1]) - z)
        return bj

完整程序點(diǎn)此下載,運(yùn)行main.py文件即可運(yùn)行游戲文章來源地址http://www.zghlxwxcb.cn/news/detail-536755.html

到了這里,關(guān)于【python大作業(yè)】pygame實(shí)戰(zhàn)(python編寫2048小游戲)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(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)文章

  • python小游戲 2048小游戲設(shè)計(jì)與實(shí)現(xiàn)

    python小游戲 2048小游戲設(shè)計(jì)與實(shí)現(xiàn)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長(zhǎng)! ??今天向大家分享一個(gè)今年(2022)最新完成的畢業(yè)設(shè)計(jì)項(xiàng)目作品 python小游戲畢設(shè) 2048小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼) ?? 學(xué)長(zhǎng)根據(jù)實(shí)現(xiàn)的難度和等級(jí)對(duì)項(xiàng)目進(jìn)行評(píng)分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 今天我們用python實(shí)現(xiàn)

    2024年02月11日
    瀏覽(19)
  • python小游戲畢設(shè) 2048小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

    python小游戲畢設(shè) 2048小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長(zhǎng)! ??今天向大家分享一個(gè)今年(2022)最新完成的畢業(yè)設(shè)計(jì)項(xiàng)目作品 python小游戲畢設(shè) 2048小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼) ?? 學(xué)長(zhǎng)根據(jù)實(shí)現(xiàn)的難度和等級(jí)對(duì)項(xiàng)目進(jìn)行評(píng)分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 項(xiàng)目獲取: https://

    2024年02月12日
    瀏覽(29)
  • python快速實(shí)現(xiàn)2048小游戲

    python快速實(shí)現(xiàn)2048小游戲

    《2048》是一款比較流行的數(shù)字游戲,最早于2014年3月20日發(fā)行。原版2048首先在GitHub上發(fā)布,原作者是Gabriele Cirulli,后被移植到各個(gè)平臺(tái)。這款游戲是基于《1024》和《小3傳奇》的玩法開發(fā)而成的新型數(shù)字游戲。 操作指南: 每次可以選擇上下左右其中一個(gè)方向去滑動(dòng),每滑動(dòng)

    2024年02月11日
    瀏覽(24)
  • 小游戲?qū)崙?zhàn)丨基于PyGame的貪吃蛇小游戲

    小游戲?qū)崙?zhàn)丨基于PyGame的貪吃蛇小游戲

    本期內(nèi)容:基于pygame的貪吃蛇小游戲 下載地址:https://download.csdn.net/download/m0_68111267/88700188 實(shí)驗(yàn)環(huán)境 python3.11及以上 pycharm pygame 安裝pygame的命令: pygame是一個(gè)開源的Python模塊,專門用于編寫電子游戲。它使用簡(jiǎn)單、功能強(qiáng)大,因此非常適合初學(xué)者入門。pygame的主要特點(diǎn)包括圖

    2024年02月03日
    瀏覽(100)
  • 用Python做一個(gè)2048小游戲

    用Python做一個(gè)2048小游戲

    2048的邏輯無非是操作 4 × 4 4times4 4 × 4 的方格,每個(gè)方格中有一個(gè)數(shù),這些數(shù)可以移動(dòng),如果兩個(gè)相同的數(shù)字在移動(dòng)時(shí)相撞了,就可以彼此合并。 而這個(gè) 4 × 4 4times4 4 × 4 的方格,無非是一個(gè)矩陣。只需設(shè)計(jì)好移動(dòng)邏輯,再用PyGame將這個(gè)方格表現(xiàn)出來就算大功告成。 2048只有

    2024年01月17日
    瀏覽(25)
  • python項(xiàng)目分享 2048小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

    python項(xiàng)目分享 2048小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長(zhǎng)! ??今天向大家分享一個(gè)今年(2022)最新完成的畢業(yè)設(shè)計(jì)項(xiàng)目作品 python小游戲畢設(shè) 2048小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼) ?? 學(xué)長(zhǎng)根據(jù)實(shí)現(xiàn)的難度和等級(jí)對(duì)項(xiàng)目進(jìn)行評(píng)分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 項(xiàng)目獲?。?https://

    2024年01月18日
    瀏覽(24)
  • python項(xiàng)目分享 - 2048小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

    python項(xiàng)目分享 - 2048小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長(zhǎng)! ??今天向大家分享一個(gè)今年(2022)最新完成的畢業(yè)設(shè)計(jì)項(xiàng)目作品 python小游戲畢設(shè) 2048小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼) ?? 學(xué)長(zhǎng)根據(jù)實(shí)現(xiàn)的難度和等級(jí)對(duì)項(xiàng)目進(jìn)行評(píng)分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 項(xiàng)目獲?。?https://

    2024年01月18日
    瀏覽(31)
  • 手把手教你用Python實(shí)現(xiàn)2048小游戲

    手把手教你用Python實(shí)現(xiàn)2048小游戲

    感覺好久沒有寫小游戲玩了,今天恰巧有空.這次我來用Python做個(gè)2048小游戲吧.廢話不多說,文中有非常詳細(xì)的代碼示例,需要的朋友可以參考下 目錄 一、開發(fā)環(huán)境 二、環(huán)境搭建 三、原理介紹 四、效果圖 Python版本:3.6.4 相關(guān)模塊: pygame模塊; 以及一些Python自帶的模塊。 安裝

    2024年04月28日
    瀏覽(94)
  • 【Pygame實(shí)戰(zhàn)】變異狗大戰(zhàn):據(jù)說是最近還不錯(cuò)的小游戲,這一個(gè)個(gè)玩到表情崩壞,點(diǎn)開即玩,趕緊來~(Python代碼搞笑版本)

    【Pygame實(shí)戰(zhàn)】變異狗大戰(zhàn):據(jù)說是最近還不錯(cuò)的小游戲,這一個(gè)個(gè)玩到表情崩壞,點(diǎn)開即玩,趕緊來~(Python代碼搞笑版本)

    只有你想不到,沒有我找不到寫不了的好游戲! 哈嘍。我是你們的栗子同學(xué)啦~ 粉絲白嫖源碼福利,請(qǐng)移步至CSDN社區(qū)或文末公眾hao即可免費(fèi)。 今天小編去了我朋友家里玩兒,看到了一個(gè)敲可愛的小狗狗??,是我朋友養(yǎng)的薩摩耶啦。 心里羨慕一下下蠻。嘿嘿,但是我養(yǎng)肯定養(yǎng)

    2024年02月11日
    瀏覽(24)
  • python編寫小游戲詳細(xì)教程,python編寫小游戲的代碼

    python編寫小游戲詳細(xì)教程,python編寫小游戲的代碼

    大家好,小編來為大家解答以下問題,python編寫小游戲詳細(xì)教程,python編寫小游戲的代碼,現(xiàn)在讓我們一起來看看吧! 今天給大家?guī)硎鍌€(gè)Python小游戲,找回童年的同時(shí)學(xué)習(xí)編程還可以摸魚, 源碼附上結(jié)尾領(lǐng)取。 一、接金幣(1分) 普通難度:? 玩法介紹: 吃金幣,控制

    2024年01月17日
    瀏覽(53)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包