【游戏开发】C 游戏编程实例
网络游戏开发分为:服务器编程、客户端编程、人工智能、数据库管理、游戏策划、美工设计、音乐特效等。
大型游戏往往需要团队合作开发,因此面向对象的编程思想在网络游戏中得到了广泛应用。
游戏开发基本流程:游戏初始化——游戏实现——游戏结束。
游戏初始化:加载游戏内容的缓存,如游戏人物、背景模型、音乐等素材,并初始化相关参数。
游戏实现:用户操作 游戏逻辑过程 游戏内容渲染。
游戏结束:释放游戏初始化时加载的缓存。
注:如果游戏结束时,不释放动态分配的缓存所用的内存空间,系统会弹出内存泄漏警告对话框。
简单的游戏过程模拟程序:
当按下A、D键,人物分别向左向右移动。
enum CHARACTER_STATE{STATE_LIVE=0,STATE_DEAD};//枚举状态生/死enum CHARACTER_ACTION{ACTION_IDLE=0,ACTION_MOVE};//枚举动作静/动enum CHARACTER_EVENT{EVENT_EMPTY=0,EVENT_ATTACKED,EVENT_RESTART};//枚举事件空/被攻击/复活#include //运用getch()#include //运用输出函数void main(){ int _pos=0; //初始化位置 int _state=STATE_LIVE; //初始化状态 int _action=ACTION_IDLE; //初始化动作 int _event=EVENT_EMPTY; //初始化事件 int _key; //声明按键 while(1) { printf("Idel at position:%d\n",_pos); _action=ACTION_IDLE; //fflush(stdin); _key=getch(); //scanf("%c",&_key); if(_key=='E') //按E键退出 { break; } if(_key=='A') //A键左移 { _action=ACTION_MOVE; _pos--; } if(_key=='D') //D键右移 { _action=ACTION_MOVE; _pos ; } switch(_action) { case ACTION_IDLE: printf("Idel at position:%d\n",_pos); break; case ACTION_MOVE: printf("Walk at position:%d\n",_pos); break; } switch(_state) { case STATE_LIVE: //存活状态 switch(_event) //事件 { case EVENT_ATTACKED: //被攻击 _state=STATE_DEAD; break; case EVENT_RESTART: //复活 break; } break; case STATE_DEAD: //死亡状态 switch(_event) { case EVENT_ATTACKED: //被攻击 break; case EVENT_RESTART: _state=STATE_LIVE; //复活 break; } break; } }}
以上程序可以拆分为3个文件:
1.Character.h【声明人物类】、Character.cpp【封装成员函数】、GameMain.cpp【整体游戏逻辑】
class Character{public: Character(); ~Character(); void Move(int _step); void Idle(); void AI_Planning(); void Render(); protected: int _pos; int _state; int _action; int _event;}
2.Character.cpp
#include "Character.h"Character::Character()//构造函数{ int _pos=0; //初始化位置 int _state=STATE_LIVE; //初始化状态 int _action=ACTION_IDLE; //初始化动作 int _event=EVENT_EMPTY; //初始化事件} Character::~Character()//析构函数{} void Character::Move(int _step) //移动步数{ _action=ACTION_MOVE; _pos =_step;} void Character::Idle() //静止{ _action=ACTION_IDLE;} void Character::AI_Planning() //行为计划{ switch(_state) { case STATE_LIVE: //存活状态 switch(_event) //事件 { case EVENT_ATTACKED: //被攻击 _state=STATE_DEAD; break; case EVENT_RESTART: //复活 break; } break; case STATE_DEAD: //死亡状态 switch(_event) { case EVENT_ATTACKED: //被攻击 break; case EVENT_RESTART: _state=STATE_LIVE; //复活 break; } break; }} void Character::Render() //渲染{ switch(_action) //动作 { case ACTION_IDLE: //静止 printf("Idel at position:%d\n",_pos); break; case ACTION_MOVE: //移动 printf("Walk at position:%d\n",_pos); break; }}
3.GameMain.cpp
#include "Character.h"void main(){ Character player; //定义玩家类 int _key; while(1) { _key=getch(); //获取按键 if(_key=='E') //按E键退出 { break; } player.Idle(); //静止 if(_key=='A') //A键左移 { player.Move(-1); } if(_key=='D') //D键右移 { player.Move(1); } player.AI_Planning(); //行为计划 player.Render(); //渲染 }}
来源:https://blog.csdn.net/qq_23996157/article/details/82596562
【游戏开发】C 游戏编程实例相关推荐
- Unity2D游戏开发和C#编程大师班
本课程采用现代游戏开发的最新内容和最新技术(Unity 2D 2022) 学习任何东西的最好方法是以一种真正有趣的方式去做,这就是这门课程的来源.如果你想了解你看到的这些不可思议的游戏是如何制作的,没 ...
- 2020校招4399游戏开发岗笔试编程题题解部分
2020校招4399游戏开发岗笔试编程题题解 序号四 题目描述: 有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位. 输入描述: 一 ...
- 【云风skynet】详解skynet的多核高并发编程丨actor模型丨游戏开发丨游戏服务端开发丨多线程丨Linux服务器开发丨后端开发
skynet中多核高并发编程给我们的启发 1. 多核并发编程 2. actor模型详解 3. 手撕一个万人同时在线游戏 视频讲解如下,点击观看: [云风skynet]详解skynet的多核高并发编程丨 ...
- Unity游戏开发之游戏存档方式
目录 1.Unity自带存储方式PlayerPrefs 2.XML存储方式 3.Json类型存储方式 1.Unity的序列化问题 2.Unity中支持序列化的类 3.Unity中Json的使用方法 4 ...
- [libGDX游戏开发教程]使用LibGDX进行游戏开发(1)-游戏设计
声明:本章是一个系列的开始,英文原文是<Learning libGDX Game Development>,大家请周知. [libgdx游戏开发教程]使用Libgdx进行游戏开发(2)-游 ...
- 微信小游戏开发教程-游戏实现2
微信小游戏开发教程-游戏实现2 绘制地面 类似于绘制背景,读者自行完成代码.src/runtime/land.js 简易View系统 坐标布局对于复杂的页面来说维护相当困难,因此这里我们引入布局的概念 ...
- 游戏开发技术——游戏引擎
游戏开发技术--游戏引擎 是什么:游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件.这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易 ...
- android 开发游戏_Android游戏开发–基本游戏循环
android 开发游戏 在到目前为止的系列之后,您将对游戏架构有所了解. 即使只是短暂的一次,但我们知道我们需要以某种形式进行输入,更新游戏的内部状态,最后将其渲染到屏幕上,并产生一些声音和/或振动 ...
- android策略模式_Android游戏开发–设计游戏实体–策略模式
android策略模式 在这一部分中,我将尝试解释我对好的游戏设计元素的理解. 我将在示例中使用droid,并编写基本的战斗模拟器脚本以查看其行为. 问题: 我指挥一个机器人,我想消灭敌人. 再次面对 ...
- 游戏开发、游戏发行与游戏代理之间是一种怎样的关系?
一款游戏是怎么从无到有地被开发生产出来?又是如何走向市场,为我们广大玩家所接触到?这就要涉及到游戏的开发.发行及代理. 这些看似简单的概念对于刚刚步入游戏世界的新手玩家来说,可能是他们常感困惑的一些疑 ...
最新文章
- 神舟战神_14英寸小钢炮 神舟战神S72021S5开箱
- ARMV8-M学习笔记-入门
- JavaScript 实现数据结构中的所有算法---通俗易懂
- c遗传算法的终止条件一般_KDD比赛之遗传算法(举例理解)
- matlab语言 列车平稳性指标,铁道车辆平稳性分析报告.docx
- linux gvim 列编辑,Linux——vim编辑器
- 计算机文化基础(高职高专版 第十一版)第二章答案
- java静态链表_Java数据结构——静态链表实现
- Keil MDK编译后生产的.axf文件用什么打开?
- 老徐和阿珍的故事:缓存穿透、缓存击穿、缓存雪崩、缓存热点,傻傻分不清楚
- 小米平板2(2015716)官方线刷包_救砖包_解账户锁
- 纯电动汽车整车控制器(VCU)详细介绍
- 伯禹公益AI《动手学深度学习PyTorch版》Task 07 学习笔记
- 通信工程测试图修改软件,通信工程工具仪器大全,你用过几种?
- 怎么判断日出时间早晚_日出日落时间早晚比较
- # CSS 背景设置
- 毕业设计-基于机器学习的股票预测
- Java算法--第二章--查找与排序(2)递归基础--佩波那契最大公约数插入排序汉诺塔
- H5 css伪类选择器
- linux login as,PuTTY登录后SSH提示login as怎么回事?
热门文章
- 功能Java示例 第4部分–首选不变性
- spring框架mvc框架_Spring的MVC测试框架入门–第1部分
- Java SE中的Bootstrap CDI 2.0
- 谷歌guava_使用Google Guava进行馆藏创建和不变性
- fork join框架_Java 7:Fork / Join框架示例
- 因此,甲骨文杀死了java.net
- Spring RESTful Web服务中的异常处理
- 使用JAX-RS和Jetty创建Web服务和Rest Server
- 休眠锁定模式– OPTIMISTIC_FORCE_INCREMENT锁定模式如何工作
- Java Minor发布计划再次进行了调整