【Pygame小游戏】真香~这款百万销量万人追捧大富翁游戏终于出现了~(赶紧来玩儿)

本文介绍了如何使用Python的Pygame库开发一款大富翁游戏,包括环境准备、游戏规则和代码演示。游戏规则简单易懂,通过掷骰子决定行走步数,并可购买经营权。代码演示部分展示了游戏的界面和基本操作,让读者可以动手尝试制作自己的Python版大富翁游戏。
摘要由CSDN通过智能技术生成

 前言

说到童年爱玩的电脑游戏,你会想到什么?

搞错了,以前没得王者、吃鸡的——那时候最国民的莫过于金山打字通,接着是扫雷、红心大战,

而红极一时的单机游戏当属《大富翁》。

扫雷是刚给大家讲过的AI自动扫雷,今天的话就给大家将讲讲《大富翁》游戏吧~

(这可是我搞了好久好久了的,看完给个👍吧~万分感谢!恭喜发财恭喜发财~🎉🎉)

一、《大富翁》思路

本文是基于python的一个2D大富翁游戏

1.游戏地图为自己使用各种网络素材制作: 各种按钮和选项,小图标等也是使用PS制作。

2.声音效果主要为背景音乐和几种游戏中音效。

3.游戏设定了两个类:玩家和建筑,玩家的参数和方法都在代码中给出,具体有:移动方法、位置判断方法、

购买房屋方法、添加小房子方法、事件判断方法。

4.玩家在大富翁的主要操作是投掷骰子,由随机函数进行判定然后进行移动,进行位置判断,然后开始进行相

关的判定。

5.游戏中的按键有:是、否、和结束回合,每个按键由没按下与按下两种状态的图片组成, 这个设计花费了

一定时间。还有 开始游戏 和 扔骰子 的两个明暗按钮,由pygame优化后的一个函数实现。

6.玩家的位置与电脑重叠时会将双方的位置进行一定偏移,防止进行覆盖,分不清自己的位置。

7.游戏基础功能有移动,购买房子,在已经购买的房子下搭建新的小房子增加过路费,被收费,判断胜负的基

础功能,此外还加入了幸运事件:

    财神 - 免收费一次
    衰神 - 双倍被收费一次
    破坏神 - 直接破坏一个建筑 无论敌我
    土地神 - 强占对面建筑
 这四项功能在位置处于左上角和右下角的时候会被触发,添加了很多游戏乐趣啦~希望大家能喜欢嘿嘿!

二、环境准备

环境安装

Python3、 Pycharm 、Pygame。

第三方库的安装:pip  install pygame

素材图片(音乐就不截图了)

三、


效果展示:

游戏规则:

1, 扔的骰子点数为你可走几格。

 2, 当走到任一格,其经营权没有被拥有时,可以按棋盘中标的价格买下并拥有它。如你的钱不

够,或不想买,则此时其它的参与者可竟价买下。如果这一经营权是你自己拥有,则不用付钱,如

果是另人拥有,则按经营权上的价格付给经营权拥有者。

.......大家可以百度下游戏规则哈哈哈 不会玩儿的话......我就是随便的给大家介绍一下下啦

开始界面一一

 游戏界面——

 游戏中掷色子——

还有很多界面我就不一一截图了哈!大家自己玩儿!需要代码的都是滴滴我就行了! 

四、代码演示

# -*- coding: utf-8 -*-

# 初始化各种模块
import pygame
import random
import sys


# 定义类
class Player():
    def __init__(self, image, name, isPlayer):
        self.name = name
        self.money = 10000
        self.isGoingToMove = False
        self.movable = True
        self.image = image
        self.position = 0
        self.temp_position = False
        self.dice_value = 0
        self.locatedBuilding = 0
        self.showText = []
        self.isPlayer = isPlayer
        self.ownedBuildings = []
        self.isShowText = False
        self.soundPlayList = 0
        self.caishen = 0
        self.shuaishen = 0
        self.tudishen = 0
        self.pohuaishen = 0

    def judgePosition(self, buildings):  # 位置判断 返回值是所在位置的建筑
        for each in buildings:
            for every in each.location:
                if self.position == every:
                    return each

            # 当使用元组时 当元组中只有一个元素时 发现该元素不可迭代
            # 出现错误 换成列表后解决
            ''' 
            try:
                for every in each.location:
                    if self.position == every:
                        print(each.name)
            except:
                if self.position == every:
                    print(each.name)
            '''

    def buyaBuilding(self, isPressYes):  # 购买方法
        if isPressYes and self.locatedBuilding.owner != self.name:
            self.locatedBuilding.owner = self.name
            self.locatedBuilding.wasBought = True
            self.ownedBuildings.append(self.locatedBuilding)
            self.money -= self.locatedBuilding.price
            self.showText = [self.name + '购买了' + self.locatedBuilding.name + '!']
            self.soundPlayList = 1
            return True
        else:
            return False

    def addaHouse(self, isPressYes):  # 在建筑物上添加一个房子
        try:
            if isPressYes and self.locatedBuilding.owner == self.name:
                self.locatedBuilding.builtRoom += 1
                self.money -= self.locatedBuilding.payment
                self.showText = [self.name + '在' + self.locatedBuilding.name + '上!', '盖了一座房子!', \
                                 '有%d' % self.locatedBuilding.builtRoom + '个房子了!', \
                                 "它的过路费是%d" % (self.locatedBuilding.payment * \
                                               (self.locatedBuilding.builtRoom + 1))]
                self.soundPlayList = 2
                return True
            else:
                return False
        except:
            pass

    def move(self, buildings, allplayers):  # 移动方法 返回值是所在的建筑位置
        self.dice_value = random.randint(1, 6)
        self.position += self.dice_value
        if self.position >= 16:
            self.position -= 16
        self.locatedBuilding = self.judgePosition(buildings)
        self.isShowText = True
        return self.eventInPosition(allplayers)

    def eventInPosition(self, allplayers):  # 判断在建筑位置应该发生的事件
        building = self.locatedBuilding
        if building.name != '空地':
            if self.locatedBuilding.wasBought == False:  # 未购买的时候显示建筑的数据!
                if self.isPlayer == True:
                    textLine0 = self.name + '扔出了' + '%d' % self.dice_value + '点!'
                    textLine1 = self.name + '来到了' + building.name + '!'
                    textLine2 = '购买价格:%d' % building.price
                    textLine3 = '过路收费:%d' % building.payment
                    textLine4 = '是否购买?'
                    self.showText = [textL
  • 16
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值