前言
说到童年爱玩的电脑游戏,你会想到什么?
搞错了,以前没得王者、吃鸡的——那时候最国民的莫过于金山打字通,接着是扫雷、红心大战,
而红极一时的单机游戏当属《大富翁》。
扫雷是刚给大家讲过的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