欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python+Pygame制作"長沙版"大富翁

 更新時間:2022年02月15日 14:04:14   作者:顧木子吖  
說到童年愛玩的電腦游戲,最國民的莫過于金山打字通,接著是掃雷、紅心大戰(zhàn),而紅極一時的單機游戲當屬《大富翁》。本文將通過Python的Pygame模塊制作"長沙版"的大富翁,需要的可以參考一下

導語

?說到童年愛玩的電腦游戲,你會想到什么?

最國民的莫過于金山打字通,接著是掃雷、紅心大戰(zhàn),而紅極一時的單機游戲當屬《大富翁》。

嘻嘻 打字游戲——掃雷這是之前都已經(jīng)給大家寫過的游戲啦~SO 剩下《大富翁》游戲。

今天來給大家大顯身手一波——

作為一款經(jīng)典的強手棋類游戲,“大富翁”系列在長達十幾年的時間內(nèi)長盛不衰,從2代開始走紅,3代成為了大哥大,4代創(chuàng)造了回合制游戲的顛峰,5代開啟了網(wǎng)絡(luò)聯(lián)機對戰(zhàn)……至今,華語大富翁類游戲怕是沒幾個能超越大富翁系列的高光時刻了。

而擲骰子、開寶箱、跳格,成了大多數(shù)80、90后的童年記憶,幾個好友擠在一起,等著自己扔骰子買地建房,孫小美、阿土伯、金貝貝、沙隆巴斯、錢夫人、莎拉公主……這些可愛的游戲人物,陪著我們度過了一個又一個愉快的時光。好啦,廢話說的有點兒多撒,一時刻剎不住腳了。

來來來 我們正式開始吧!

一、大富翁之旅

嘿嘿!元宵啦,有沒有小伙伴兒來長沙浪一浪吖?

今天這款《大富翁》小游戲是基于長沙著名景點所作的撒、可以看到,地圖上鑲嵌進了 8 個長沙的標志性地點,按 照從上往下、從左往右的順序依次為西站、世界之窗、五一廣場、橘子洲、植物園、博物館、岳麓書院、岳麓山。當玩家到達這些 地點時,便會觸發(fā)相應(yīng)的特殊事件。

二、特殊事件

1)觸發(fā)的特殊事件如下

西站:玩家經(jīng)過西站時會停留休息一天,即一 回合不能擲骰子,作為回報,該玩家 GPA 上升 0.2。

世界之窗:玩家經(jīng)過世界之窗時會玩兒一天,即一回合不能 擲骰子。

五一廣場:玩家經(jīng)過五一廣場時會體驗一次幫忙充場跑跑業(yè)務(wù), 金錢增加 500,GPA 下降 1.0。

橘子洲:玩家經(jīng)過 橘子洲時會口渴買茶顏跟吃的,金 錢減少 100。

植物園:玩家經(jīng)過植物園時會買票觀看演出,金錢減 少 200。

博物館:玩家經(jīng)過博物館時突然記起來在世界之窗掉東西, 即直接傳送到世界之窗,且一個回合不能擲骰子。

岳麓山:玩家經(jīng)過岳麓山時會看到最美風景,身、心收到鼓舞,GPA 上升 0.3。

2)游戲規(guī)則

作為一款大富翁游戲,“長沙之旅”保留了傳統(tǒng)大富翁游 戲的機制,即通過買地建房賺取金錢,某玩家金錢耗盡即宣布破產(chǎn),游戲結(jié)束。

在此基礎(chǔ)上,為了更多地體現(xiàn)出多種元 素,游戲中每個角色的實力除了財產(chǎn)之外,還有另一個衡量標準——GPA。當某位玩家的 GPA 達到 4.0 時,游戲結(jié)束, 該玩家獲勝;GPA 達到 1.0 時,游戲結(jié)束,該玩家失敗。本游戲可以支持 2~4 人的玩法,為玩家準備的 4 位可愛 的游戲角色哦!

三、代碼演示

1)環(huán)境素材

2)運行環(huán)境

環(huán)境安裝 本文用到的運行環(huán)境:Python3.7、Pycharm社區(qū)版2020、Pygame游戲模塊部分自帶模塊直 接導入不需要安裝。

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

3)主程序

import pygame
import sys
import time
 
from draw import Button, draw_text, draw_mapstatus, draw_player
from game import *
from player import Player
 
 
pygame.init()
 
screen_size = (1080, 680)  # 第一個是寬度,第二個是高度
role_size = (60, 60)
screen = pygame.display.set_mode(screen_size)
pygame.display.set_caption("大富翁——長沙之旅")
map_screen = pygame.image.load('image/地圖.bmp')
stop_picture = pygame.image.load('image/禁止.jpg')
stop_picture = pygame.transform.scale(stop_picture, (20, 20))
 
lose_sound = pygame.mixer.Sound('sound/失敗.wav')  # 載入音效
win_sound = pygame.mixer.Sound('sound/勝利.wav')
up_sound = pygame.mixer.Sound('sound/升級.wav')
click_sound = pygame.mixer.Sound('sound/按鍵.wav')
chances_sound = pygame.mixer.Sound('sound/事件.wav')
 
picture_dice = []
for i in range(6):
    picture_dice.append(pygame.image.load('image/dice/%d.jpg'%(i+1)))
 
map_screen = pygame.transform.scale(map_screen, screen_size)
 
screen.blit(map_screen, (0, 0))
 
play_button = Button(screen, '開始游戲')  # 繪制開始游戲按鈕
play_button.draw_button()
 
status = 0  # 控制游戲進程 0:游戲未開始 1:選擇游戲人數(shù) 2:擲骰子 3:玩家行走 4:觸發(fā)事件 5:買地建房 6:游戲結(jié)束
cur_player = 0  # 當前玩家
dice_answer = 1 # 擲骰子結(jié)果
player = []
role = []
 
local_init = [0, 20, 12, 32]  # 四位玩家最初的位置
map_status = []
for i in range(8):
    map_status.append(Map(i))  # 存儲地產(chǎn)信息,包括所有者、價值、租金等
 
while True:
    if status == 0:  # 游戲未開始
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == pygame.MOUSEBUTTONDOWN:
                (mouse_x, mouse_y) = event.pos
                #print(mouse_x, mouse_y)
                if click_button(mouse_x, mouse_y, 0):
                    click_sound.play()
                    num_player_button = Button(screen, '請輸入游戲人數(shù)(2~4)')
                    num_player_button.draw_button()
                    draw_text(screen, (540, 440), '操作指南:按↑擲骰子、購買地產(chǎn)',
                              50, 'STXINGKA.TTF', pygame.Color('gold'))
                    status = 1
        pygame.display.update()
    elif status == 1:  # 選擇游戲人數(shù)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                if 258 <= event.key <= 260 or 50 <= event.key <= 52: #載入相應(yīng)數(shù)量的角色
                    click_sound.play()
                    role.append(pygame.image.load('image/role/小e.jpg'))
                    role.append(pygame.image.load('image/role/皮卡丘.jpg'))
                    if event.key == 259 or event.key == 51:
                        role.append(pygame.image.load('image/role/可達鴨.jpg'))
                    elif event.key == 260 or event.key == 52:
                        role.append(pygame.image.load('image/role/可達鴨.jpg'))
                        role.append(pygame.image.load('image/role/小黃雞.jpg'))
                    screen.blit(map_screen, (0, 0))
                    for i in range(len(role)): #初始化游戲玩家
                        role[i] = pygame.transform.scale(role[i], role_size)
                        player.append(Player(i))
                        player[i].local = local_init[i]
                    draw_player(screen, player, role, stop_picture)
                    status = 2
    elif status == 2: #擲骰子
        for i in range(6):  # 繪制骰子動畫
            screen.blit(picture_dice[i], (500, 400))
            pygame.display.update()
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                if event.key == 273:
                    dice_answer = get_dice()
                    status = 3
        pygame.display.update()
    elif status == 3: #玩家行走
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
        for i in range(dice_answer):
            screen.blit(map_screen, (0, 0))
            screen.blit(picture_dice[dice_answer - 1], (500, 400))
            player[cur_player].local = (player[cur_player].local + 1) % 40
            draw_mapstatus(screen, player, map_status)
            draw_player(screen, player, role, stop_picture)
            click_sound.play()
            pygame.display.update()
            time.sleep(0.5)
        if Special(player[cur_player].local): #判斷是否觸發(fā)特殊事件
            status = 4
        else:  # 普通地段,判斷需要買地或交租金
            local = player[cur_player].local
            if map_status[local2order(local)].owner == -1:
                chances_sound.play()
                draw_text(screen, (800, 340), '是否買下這塊地?(¥%d)' % map_status[local2order(local)].value1, 30,
                          'STXINGKA.TTF', pygame.Color('grey'))
                status = 5
            elif map_status[local2order(local)].owner == cur_player and map_status[local2order(local)].level == 1:
                chances_sound.play()
                draw_text(screen, (800, 340), '是否要加蓋建筑?(¥%d)' % map_status[local2order(local)].value2, 30,
                          'STXINGKA.TTF', pygame.Color('grey'))
                status = 5
            elif map_status[local2order(local)].owner == cur_player and map_status[local2order(local)].level == 2:
                cur_player = (cur_player + 1) % len(player)  # 下一個玩家擲骰子
                while player[cur_player].stop == 1:
                    player[cur_player].stop = 0
                    cur_player = (cur_player + 1) % len(player)
                status = 2
            else:
                if map_status[local2order(local)].level == 1:
                    player[cur_player].money -= map_status[local2order(local)].rent1
                    player[map_status[local2order(local)].owner].money += map_status[local2order(local)].rent1
                    screen.blit(map_screen, (0, 0))
                    screen.blit(picture_dice[dice_answer - 1], (500, 400))
                    draw_mapstatus(screen, player, map_status)
                    draw_player(screen, player, role, stop_picture)
                    draw_text(screen, (800, 340), '支付租金(¥%d)' % map_status[local2order(local)].rent1, 30,
                              'STXINGKA.TTF', pygame.Color('grey'))
                    chances_sound.play()
                elif map_status[local2order(local)].level == 2:
                    player[cur_player].money -= map_status[local2order(local)].rent2
                    player[map_status[local2order(local)].owner].money += map_status[local2order(local)].rent2
                    screen.blit(map_screen, (0, 0))
                    screen.blit(picture_dice[dice_answer - 1], (500, 400))
                    draw_mapstatus(screen, player, map_status)
                    draw_player(screen, player, role, stop_picture)
                    draw_text(screen, (800, 340), '支付租金(¥%d)' % map_status[local2order(local)].rent2, 30,
                              'STXINGKA.TTF', pygame.Color('grey'))
                    chances_sound.play()
                cur_player = (cur_player + 1) % len(player)  # 下一個玩家擲骰子
                while player[cur_player].stop == 1:
                    player[cur_player].stop = 0
                    cur_player = (cur_player + 1) % len(player)
                if not game_over(player) == 0:
                    if game_over(player) > 0:
                        win_sound.play()
                    else:
                        lose_sound.play()
                    status = 6
                else:
                    status = 2
            pygame.display.update()
    elif status == 4: #觸發(fā)特殊事件
        if player[cur_player].local == 5: #C樓
            player[cur_player].money -= 100
            screen.blit(map_screen, (0, 0))
            screen.blit(picture_dice[dice_answer - 1], (500, 400))
            draw_mapstatus(screen, player, map_status)
            draw_player(screen, player, role, stop_picture)
            draw_text(screen, (800, 340), '去橘子洲購物,金錢-100', 30, 'STXINGKA.TTF', pygame.Color('grey'))
            chances_sound.play()
        elif player[cur_player].local == 11: #紫操
            player[cur_player].money += 100
            if full_somewhere(35, player):
                player[cur_player].gpa += 0.2
                screen.blit(map_screen, (0, 0))
                screen.blit(picture_dice[dice_answer - 1], (500, 400))
                draw_mapstatus(screen, player, map_status)
                draw_player(screen, player, role, stop_picture)
                draw_text(screen, (800, 340), '西站,績點+0.2', 30, 'STXINGKA.TTF', pygame.Color('grey'))
                chances_sound.play()
            else:
                player[cur_player].local = 35
                player[cur_player].stop = 1
                screen.blit(map_screen, (0, 0))
                screen.blit(picture_dice[dice_answer - 1], (500, 400))
                draw_mapstatus(screen, player, map_status)
                draw_player(screen, player, role, stop_picture)
                draw_text(screen, (800, 340), '博物館', 30, 'STXINGKA.TTF', pygame.Color('grey'))
                chances_sound.play()
        elif player[cur_player].local == 15: #羅姆樓
            if cur_player == 0:
                player[0].stop = 1
                player[0].gpa += 0.2
                screen.blit(map_screen, (0, 0))
                screen.blit(picture_dice[dice_answer - 1], (500, 400))
                draw_mapstatus(screen, player, map_status)
                draw_player(screen, player, role, stop_picture)
                draw_text(screen, (750, 340), '學習一天,績點+0.2', 30, 'STXINGKA.TTF', pygame.Color('grey'))
                chances_sound.play()
        elif player[cur_player].local == 19: #主樓
            player[cur_player].gpa += 0.3
            screen.blit(map_screen, (0, 0))
            screen.blit(picture_dice[dice_answer - 1], (500, 400))
            draw_mapstatus(screen, player, map_status)
            draw_player(screen, player, role, stop_picture)
            draw_text(screen, (750, 340), '觀看岳麓山風景,績點+0.3', 30, 'STXINGKA.TTF', pygame.Color('grey'))
            chances_sound.play()
        elif player[cur_player].local == 25: #新清
            player[cur_player].money -= 200
            screen.blit(map_screen, (0, 0))
            screen.blit(picture_dice[dice_answer - 1], (500, 400))
            draw_mapstatus(screen, player, map_status)
            draw_player(screen, player, role, stop_picture)
            draw_text(screen, (800, 340), '去植物園看演出,金錢-200', 30, 'STXINGKA.TTF', pygame.Color('grey'))
            chances_sound.play()
        elif player[cur_player].local == 31: #二校門
            player[cur_player].money += 500
            player[cur_player].gpa -= 1.0
            screen.blit(map_screen, (0, 0))
            screen.blit(picture_dice[dice_answer - 1], (500, 400))
            draw_mapstatus(screen, player, map_status)
            draw_player(screen, player, role, stop_picture)
            draw_text(screen, (750, 340), '五一廣場業(yè)務(wù),金錢+500,績點-1.0', 30, 'STXINGKA.TTF', pygame.Color('grey'))
            chances_sound.play()
        elif player[cur_player].local == 35: #校醫(yī)院
            player[cur_player].stop = 1
            screen.blit(map_screen, (0, 0))
            screen.blit(picture_dice[dice_answer - 1], (500, 400))
            draw_mapstatus(screen, player, map_status)
            draw_player(screen, player, role, stop_picture)
            draw_text(screen, (800, 340), '世界之窗', 30, 'STXINGKA.TTF', pygame.Color('grey'))
            chances_sound.play()
        elif player[cur_player].local == 39: #圖書館
            if not cur_player == 2:
                player[cur_player].stop = 1
                player[cur_player].gpa += 0.2
                screen.blit(map_screen, (0, 0))
                screen.blit(picture_dice[dice_answer - 1], (500, 400))
                draw_mapstatus(screen, player, map_status)
                draw_player(screen, player, role, stop_picture)
                draw_text(screen, (800, 340), '泡在西站一天,績點+0.2', 30, 'STXINGKA.TTF', pygame.Color('grey'))
                chances_sound.play()
        cur_player = (cur_player + 1) % len(player) #下一個玩家擲骰子
        while player[cur_player].stop == 1:
            player[cur_player].stop = 0
            cur_player = (cur_player + 1) % len(player)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
        pygame.display.update()
        if not game_over(player) == 0:
            if game_over(player) > 0:
                win_sound.play()
            else:
                lose_sound.play()
            status = 6
        else:
            status = 2
    elif status == 5: #買地建房
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                if event.key == 273:
                    if map_status[local2order(player[cur_player].local)].level == 0:
                        player[cur_player].money -= map_status[local2order(player[cur_player].local)].value1
                        map_status[local2order(player[cur_player].local)].owner = cur_player
                        map_status[local2order(player[cur_player].local)].level = 1
                    elif map_status[local2order(player[cur_player].local)].level == 1:
                        player[cur_player].money -= map_status[local2order(player[cur_player].local)].value2
                        map_status[local2order(player[cur_player].local)].level = 2
                cur_player = (cur_player + 1) % len(player)  # 下一個玩家擲骰子
                while player[cur_player].stop == 1:
                    player[cur_player].stop = 0
                    cur_player = (cur_player + 1) % len(player)
                status = 2
                screen.blit(map_screen, (0, 0))
                screen.blit(picture_dice[dice_answer - 1], (500, 400))
                draw_player(screen, player, role, stop_picture)
                draw_mapstatus(screen, player, map_status)
                up_sound.play()
                if not game_over(player) == 0:
                    if game_over(player) > 0:
                        win_sound.play()
                    else:
                        lose_sound.play()
                    status = 6
        pygame.display.update()
    elif status == 6:  # 游戲結(jié)束
        if game_over(player) > 0:
            draw_text(screen, (540, 340), '游戲結(jié)束,%s勝利' % player[game_over(player)-1].name,
                      50, 'STXINGKA.TTF', pygame.Color('darkgreen'))
            draw_text(screen, (540, 440), '再來一局',
                      50, 'STXINGKA.TTF', pygame.Color('darkgreen'))
 
        else :
            draw_text(screen, (540, 340), '游戲結(jié)束,%s失敗' % player[- game_over(player) - 1].name,
                      50, 'STXINGKA.TTF', pygame.Color('darkgreen'))
            draw_text(screen, (540, 440), '再來一局',
                      50, 'STXINGKA.TTF', pygame.Color('darkgreen'))
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == pygame.MOUSEBUTTONDOWN:
                (mouse_x, mouse_y) = event.pos
                if click_button(mouse_x, mouse_y, 1):
                    player = []
                    role = []
                    map_status = []
                    for i in range(8):
                        map_status.append(Map(i))
                    cur_player = 0
                    click_sound.play()
                    screen.blit(map_screen, (0, 0))
                    num_player_button = Button(screen, '請輸入游戲人數(shù)(2~4)')
                    num_player_button.draw_button()
                    draw_text(screen, (540, 440), '操作指南:按↑擲骰子、購買地產(chǎn)',
                              50, 'STXINGKA.TTF', pygame.Color('gold'))
                    status = 1
        pygame.display.update()

4)玩家角色

class Player:  # 玩家類
    def __init__(self, order):
        self.money = 3000
        self.gpa = 3.0
        self.local = 0
        self.stop = 0
        if order == 0:
            self.name = '小E'
        elif order == 1:
            self.name = '皮卡丘'
        elif order == 2:
            self.name = '可達鴨'
        elif order == 3:
            self.name = '小黃雞'

四、效果展示

1)初始界面 

鼠標左鍵點擊“開始游戲”即可!

2)選擇游戲人數(shù)界面 

鍵盤輸入 2~4 的數(shù)字即可!

3)后續(xù)

按鍵盤“↑”鍵擲骰子、按鍵盤“↑”鍵買地(升級地產(chǎn)操作相同、鼠標左鍵點擊“再來一局”重新開始游戲!

?以上就是Python+Pygame制作"長沙版"大富翁的詳細內(nèi)容,更多關(guān)于Python Pygame大富翁的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論