第一种 这十个游戏都是从头开始写不管是40%一样的部分还是60%的不一样的部分每个游戏都要写一遍。
第二种 首先写游戏之前把这个十个游戏中把那个40%的一样的代码部分写成若干个类库,组件。开始写游戏的时候只写那个不一样的60%的代码部分,需要些那40% 一样部分的时候就直接调用先前写好的类库,组件,避免重复写一样的代码浪费时间,浪费精力,浪费资金。游戏引擎就是先前写好的40%的代码部分,任何游戏有可能用到的代码部分写成独立的工具,然后把好几个像这样的工具集合在一个软件上 这就是游戏引擎。
比较流行的游戏引擎有,虚幻4,unity3D,cocos2dx…等等。
游戏引擎与游戏本身是没有什么关系因为你写游戏的时候可以不用游戏引擎直接调用平台(Win,OS,Android)提供给你图形库,声音库,和硬件,输入输出设备有关的类库,库函数。
如果说有关系那就是用游戏引擎写游戏的时候必须要遵守引擎的规范,用引擎写的游戏有一定程度上依赖引擎提供的游戏运行环境。
不过经济上有很大的关系因为上面提到的虚幻4,unity3D等引擎前期是免费,等游戏写完开始盈利到一定的程度以后引擎公司从游戏公司拿一部分作为引擎的授权费。而且不是一次性的。
就算有了游戏引擎的帮助上面讲的那个60%不一样部分还是大家自己用变成语言编写完成。每个引擎支持的编程语言是不一样的,有的支持c/c++,有的c#,有的js。每个引擎支持的编程语言数量也是不一样的,有的引擎只支持一种编程语言有的就好几个变成语言。
以上全是个人理解有很多不足的地方不喜欢勿喷,如有喜欢的朋友记得点赞,点关注。
战网怎么解除安全模式,如何做网络安全产品,u盘的内容怎么都删不掉
用python可以编写一款游戏模拟器么?
python 项目:DIY 街机游戏
这个练习是一个小游戏程序,如果要是给它起个名字的话,应该叫:快躲,香蕉。 主要的游戏内容就是,游戏开始会从屏幕上方不断随便的掉一些铁块,在屏幕下 方有一个小香蕉是受你控制的,你需要不断的左右移动来躲避铁块。在你躲避完 一定数量的铁块之后,就会进入下一关。下一关依然是让你躲铁块,不过铁块下 降的速度就快了很多。在游戏中你可以按下任意键暂停,再次按则继续,按下 ESC 键退出。这就是全部的功能了,下面大家来看游戏的实现。
首先对所有代码分类:
1、整体上代码有一个配置模块,来对游戏的速度、屏幕 的宽度、香蕉移动速度、字体大小、各个物体的图片等进行配置。
2、然后是有 一个元素模块,即游戏中的两个元素落下来的铁块以及被砸的香蕉,其中还要包 含他们具有的行为。
3、然后还有游戏中的各种状态模块,状态模块中的类继承 关系稍微多一些,处于家谱最上方的就是 state 类,由它来衍生其他的所有状态, 它的直接子类是 Level 和 Pause,其中 Pause 有衍生出子类 Info、levelCleared、 GameOver、StartUp。
4、最后就是游戏的主模块,用来让其他模块协调工作 的。
然后再来看一个整体图:
有了上面整体的认识,下面就要细揪一下了。偶自己看代码的方法是这样的,首先整体分析,然后在从程序的入口点开始分析。偶估计大多数人也是这么做的。
首先是 squish.py 文件中的 game 类:
class Game:
def init (self,*args):
path = os.path.abspath(args[0])
dir = os.path.split(path)[0]
os.chdir(dir)
self.state = None
self.nextState = StartUp()
def run(self):
pygame.init()
flag = 0
if config.full_screen:
flag = FULLSCREEN
screen_size = config.screen_size
screen = pygame.display.set_mode(screen_size,flag)
pygame.display.set_caption(‘Fruit Self Defense’)
pygame.mouse.set_visible(False)
while True:
if self.state != self.nextState:
self.state = self.nextState
self.state.firstDisplay(screen)
for event in pygame.event.get():
self.state.handle(event)
self.state.update(self)
self.state.display(screen)
if name == ‘ main ‘:
game = Game(*sys.argv)
game.run()
忽略掉 init 中的设置代码,在 run 中,该管理类首先调用 pygame 初始化并启动游戏界面,然后在一个 whileTrue 的死循环中不断的进行状态判断,事件处理,然后根据事件更新当前状态,并且绘制界面。
让大家把焦点放在那个死循环中,因为他就是整个程序的流程所在。 其中状态和事件的关系就是,当发生某一事件之后,状态就会发生变化,比如点击事件、过关事件、死亡事件。这些事件的来源分别是:用户操作、系统判断、系统判断。要继续深入分析就需要再拿一部分代码出来。
依然是来自 squish.py 文件中剩余的所有代码:
import os, sys, pygame
from pygame.locals import *
import objects, config
class State:
def handle(self,event):
if event.type == QUIT:
sys.exit()
if event.type == KEYDOWN and event.key == K_ESCAPE:
sys.exit()
def firstDisplay(self, screen):
screen.fill(config.background_color)
pygame.display.flip()
def display(self, screen):
pass
class Level(State):
def init (self,number=1):
self.number = number
self.remaining = config.weights_per_level
speed = config.drop_speed
speed += (self.number – 1) * config.speed_increase
self.weight = objects.Weight(speed)
self.banana = objects.Banana()
both = self.weight,self.banana
self.sprites = pygame.sprite.RenderUpdates(both)
def update(self, game):
self.sprites.update()
if self.banana.touches(self.weight):
game.nextState = GameOver()
elif self.weight.landed:
self.weight.reset()
self.remaining -= 1
if self.remaining == 0:
game.nextState = LevelCleared(self.number)
def display(self, screen):
screen.fill(config.background_color)
updates = self.sprites.draw(screen)
pygame.display.update(updates)
class Paused(State ):
finished = 0
image = None
text = ”
def handle(self, event):
State.handle(self, event)
if event.type in [MOUSEBUTTONDOWN,KEYDOWN]:
self.finished = 1
def update(self, game):
if self.finished:
game.nextState = self.nextState()
def firstDisplay(self, screen):
screen.fill(config.background_color)
font = pygame.font.Font(None, config.font_size)
lines = self.text.strip().splitlines()
height = len(lines) * font.get_linesize()
center,top = screen.get_rect().center
top -= height // 2
if self.image:
image = pygame.image.load(self.image).convert()
r = image.get_rect()
top += r.height // 2
r.midbottom = center, top -20
screen.blit(image, r)
antialias = 1
black = 0,0,0
for line in lines:
text = font.render(line.strip(),antialias,black)
r = text.get_rect()
r.midtop = center,top
screen.blit(text, r)
top += font.get_linesize()
pygame.display.flip()
class Info(Paused):
nextState = Level
text = ”’
In this game you are a banana,
trying to survive a course in
self-defense against fruit,where the
participants will ‘defend’ themselves
against you with a 16 ton weight.”’
class StartUp(Paused):
nextState = Info
image = config.splash_image
text = ”’
Welcome to Squish.
the game of Fruit Self-Defense”’
class LevelCleared(Paused):
def init (self, number):
self.number = number
self.text = ”’Level %i cleared
Click to start next level”’ % self.number
def nextState(self):
return Level(self.number + 1)
class GameOver(Paused):
nextState = Level
text = ”’
Game Over
Click to Restart, Esc to Quit”’
其中用户判断部分就是 Paused 类中的 update 方法和 handle 方法,而系统判断就是 Level 类中的 update 方法。还有一个要注意的地方就是 Level 类中update 方法中的第一行代码:self.sprites.update(),这是让铁块不断下落的关键代码。用户判断部分的代码已经有了,下面需要贴上系统判断时用到的代码.
objects.py 中的代码:
import pygame,config,os
from random import randrange
class SquishSprite(pygame.sprite.Sprite):
def init (self, image):
pygame.sprite.Sprite. init (self)
self.image = pygame.image.load(image).convert()
self.rect = self.image.get_rect()
screen = pygame.display.get_surface()
shrink = -config.margin*2
self.area = screen.get_rect().inflate(shrink,shrink)
class Weight(SquishSprite):
def init (self, speed):
SquishSprite. init (self,config.weight_image)
self.speed = speed
self.reset()
def reset(self):
x = randrange(self.area.left, self.area.right)
self.rect.midbottom = x, 0
def update(self):
self.rect.top += self.speed
self.landed = self.rect.top >= self.area.bottom
class Banana(SquishSprite):
def init (self):
SquishSprite. init (self, config.banana_image)
self.rect.bottom = self.area.bottom
self.pad_top = config.banana_pad_top
self.pad_side = config.banana_pad_side
def update(self):
self.rect.centerx = pygame.mouse.get_pos()[0]
self.rect = self.rect.clamp(self.area)
def touches(self, other):
bounds = self.rect.inflate(-self.pad_side,-self.pad_top)
bounds.bottom = self.rect.bottom
return bounds.colliderect(other.rect)
在类 Banana 和 Weight 中的 update 和 touches 方法,用于进行系统判断。好了,到这主要的东西都分析完了,剩下的只需要稍看一下就能够懂得了。 最后还有一个配置模块的代码 config.py:banana_image = ‘banana.png’weight_image = ‘weight.png’splash_image = ‘weight.png’screen_size = 800,600background_color = 255,255,255margin = 30full_screen = 1font_size = 48drop_speed = 1banana_speed = 10speed_increase = 1weights_per_level = 10banana_pad_top = 40banana_pad_side = 20到此为止,《python 基础教程》中的十个项目都已经分析了一遍,下一步要做的就是做几个实用软件出来,然后把 python 再好好深入研究下。
应晓勇要求,上几个运行图:
想找别人开发一个棋牌游戏?
棋牌游戏偶自己没有接触过,做这类游戏的个人团体还是很少成功的吧,因为涉及赌,是很敏感的,偶朋友圈子有做棋牌室的,运营和管理起来就很有难度,他跟偶说:跟赌有关的以后不会碰了,“来钱快”和“去钱快”是两个极端,掌握不好很容易“翻”。
说这个只是说“赌”目前还没有完全正式开放,涉及这类的棋牌游戏也很难做出成绩,如果你真的很热爱棋牌游戏只能走竞技路线,千万别走传统游戏充钱砸钱圈钱的不归路,对于个人做这行是必须要知道的。随随便便出个【XX年龄某某沉迷XX游戏导致….】基本就很难翻身了。
“棋牌”受众是自古以来就存在的,游戏也有前景,但发展到现在,都在转型竞技。像天津体育频道的【旗开得胜】
深圳体育健康频道的【偶来斗地主】
这些都是有“背景”才可以撑下去的游戏平台,当然也是互相借势,良性发展。
所以你要做个棋牌游戏,一定要想好方向,这类游戏目前还是有些敏感的,但是前景确实非常看好。如果是手机游戏,那开发成本很小,但宣传上就要下功夫了。
只能说出自己想法给你当个参考。
偶是游戏没有圈儿 专注闲暇时间在悟空混日子 偶的回答有帮助可以点赞或关注