范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

游戏设计之路不来推推箱子么?

  大家好,失踪人口回归。新的一年,新的坑位(不是),今年就让我来带领小伙伴们一起设计一款独立游戏吧(*╹▽╹*)。
  言归正传,说起游戏,大家第一印象可能就是次时代主机,PC主机或手机上那些画面绚丽,剧情丰富的游戏:如《GTA系列》,《赛博朋克2077》,《梦幻西游》,《塞尔达传说》等等。但可惜的是,单单靠一个人,是不可能完成这样的大型游戏的。不是技术上的问题,而是人力与成本上的问题。
  但不要灰心,市面上也有很多仅靠1,2个人做出的很多精美的甚至获得国际大奖的独立游戏:如《小小梦魇》,《地狱边境》等等。
  但我们要记住:万丈高楼起于垒土。作为一个初学者,我们需要学习的知识还有很多。所以不要着急,让我们从地基开始,打好基础,一步一步地向最高峰发起进攻。
  一些题外话:游戏设计光靠一片热血是不行的,一些必备的基础知识则是必需的。例如基本的C++,JAVA等计算机语言的掌握,基本的开发环境的安装等。这里我默认读者是掌握了这些知识的。
  ·创建项目
  首先,我们需要在VS上创建一个空的控制台应用
  接着我们可以给项目取一个名字,这里我就叫这个小游戏为《回家吧-小箱子》
  项目名称为"GoHome_SmallBox"
  在项目创建成功后,我们可以看到VS自动为我们创建了一个GoHome_SmallBox.cpp文件 #include    int main() {     std::cout << "Hello World! "; }
  我们将上面的代码修改一下: #include  using namespace std;   int main() {     char c;     cin >> c;     cout << c;     return 0; }
  cin,cout都是istream类和ostream类的全局变量,我们在包含头文件iostream后,并声明using namespace std,就可以在任何位置使用了。
  cin通过>>将输入值写入变量c,cout通过<<将变量值c输出。
  对于大部分游戏程序来说,整个项目可以分为三步操作: while(true){ getInput(); // 获取键盘或者鼠标的输入信息 updateGame(); // 根据输入信息对游戏内容进行修改 draw(); // 对修改后的游戏内容进行绘制并输出结果 }
  ·游戏内容设计
  我们设定箱子为符号Y,箱子的最终目的地为符号X,当箱子到达目的地后,X变为Z,表示箱子成功回到家。而推动的小人则设定为P。
  思考:当我们设计好基本内容后,还需要进行进一步的思考 当P到达边界后,继续向边界移动会发生什么? 当P推动两个箱子时,会发生什么? 朝着边界推箱子,会发生什么?
  假如不解决上面的一些问题,我们直接进行编码实现的话,就会发现箱子有时候会飞出边界,人物P也会移动到边界之外。这样一来,就不符合我们所设定的游戏规则了。
  ·程序设计
  首先我们来定义一些基本的初始变量: // #表示墙壁,p表示玩家,X表示目的地,Y表示箱子 const char gSceneData[] = " ########  # XX p #  #  YY  #  #      #  ########"; const int gSceneWidth = 8; const int gSceneHeight = 5; enum Object {   OBJ_SPACE, // 空白空间   OBJ_WALL,  // 墙壁 #   OBJ_GOAL,  // 目标点 X   OBJ_BOX,   // 盒子 Y   OBJ_BOX_ON_GOAL,  // 盒子在目标点处 Z   OBJ_PLAYER,  // 玩家 p   OBJ_PLAYER_ON_GOAL,  //  玩家在目标点处 P   OBJ_UNKNOW  // 未知 };
  这里我把最初的初始场景数据放在了一个全局变量char数组gSceneData中。然后我们定义了一个枚举变量,这里面使用了几个枚举值描述了所有的游戏状态。
  接下就是我们的主循环的代码 int main() {   // 创建初始状态数组   Object* state = new Object[gSceneWidth * gSceneHeight];   // 初始化场景   initialize(state, gSceneWidth, gSceneHeight, gSceneData);   // 游戏主循环   while (true) {     // 绘制     draw(state, gSceneWidth, gSceneHeight);     // 通关检测     if (check(state, gSceneWidth, gSceneHeight)) {       break;     }     // 获取输入     cout << "w:向上;a:向左;s:向下;d:向右,请输入:" << endl;     char input;     cin >> input;     // 更新数据     update(state, input, gSceneWidth, gSceneHeight);   }   // 胜利后的信息   cout << "恭喜你成功过关!" << endl;   delete[] state;   state = 0;   return 0; }
  注意到其中调用到了下面四个方法: // 初始化方法 void initialize(Object* state, int w, int h, const char* sceneData) {   const char* index = sceneData;   int x = 0;   int y = 0;   while (*index != "") { // 当字符不为NULL时     Object t;     switch (*index) {     case "#": {       t = OBJ_WALL;       break;     }     case " ": {       t = OBJ_SPACE;       break;     }     case "X": {       t = OBJ_GOAL;       break;     }     case "Y": {       t = OBJ_BOX;       break;     }     case "Z": {       t = OBJ_BOX_ON_GOAL;       break;     }     case "p": {       t = OBJ_PLAYER;       break;     }     case "P": {       t = OBJ_PLAYER_ON_GOAL;       break;     }     case " ": { // 到下一行       x = 0; // x返回最左边       ++y; // y进入下一行       t = OBJ_UNKNOW; // t暂时无数据       break;     }     default: {       t = OBJ_UNKNOW; // t为非法数据     }     }     ++index;     if (t != OBJ_UNKNOW) { // 若t为非法数据,则略过       state[y * w + x] = t;// 向状态数据写入数据,这里的位置表示向下第y行,向右第x列的位置。这里是将一个二维数据存放在了一个一维数组里面       ++x;     }   } } // 绘制,将state数组的数据绘制在控制台中 void draw(const Object* state, int w, int h) {   // 按照枚举值的顺序定义该数组   const char front[] = { " ","#","X","Y","Z","p","P" };   for (int y = 0; y < h; ++y) {     for (int x = 0; x < w; ++x) {       Object o = state[y * w + x];       cout << front[o];     }     cout << endl;   } } // 通关检测 bool check(const Object* state, int w, int h) {   // 检查若没有盒子后,则通关   for (int i = 0; i < w * h; ++i) {     if (state[i] == OBJ_BOX) {       return false;     }   }   return true; } // 更新数据 void update(Object* state, char input, int w, int h) {   // 首先获取移动的变换量   int dx = 0;   int dy = 0;   // 这里我们注意一下,我们假设的是左上角为坐标原点,   // 那么向上移动,y则为-1;向下移动,y则为1,y轴正向为向下   // 向左移动,x为-1;向右移动,x为1   switch (input) {   case "a":dx = -1; break;// 向左移动   case "d":dx = 1; break;// 向右移动   case "w":dy = -1; break;// 向上移动   case "s":dy = 1; break;// 向下移动   }   // 查询玩家坐标,这里其实可以设置一个全局变量,记录上一次玩家所在位置,这样就不用每次来寻找一次玩家的位置   int i = -1;   for (i = 0; i < w * h; ++i) {     if (state[i] == OBJ_PLAYER || state[i] == OBJ_PLAYER_ON_GOAL) {       break;     }   }   int x = i % w;// 小人的x轴位置应当为i对宽度的余数   int y = i / w;// 小人的y轴位置应当为i对宽度的商     //玩家移动后的坐标   int tx = x + dx;   int ty = y + dy;   // 对玩家的位置进行判断   if (tx < 0 || ty < 0 || tx >= w || ty >= h) {     return;   }   // 移动位置为空白或者是目标点,则玩家移动   int p = y * w + x;// 玩家的位置   int tp = ty * w + tx;// 玩家移动后的位置   if (state[tp] == OBJ_SPACE || state[tp] == OBJ_GOAL) {     state[tp] = (state[tp] == OBJ_GOAL) ? OBJ_PLAYER_ON_GOAL : OBJ_PLAYER;// 若移动位置为目标点,则变为玩家站在目标点;否则则为玩家本身     state[p] = (state[p] == OBJ_PLAYER_ON_GOAL) ? OBJ_GOAL : OBJ_SPACE;// 若当前位置为目标点,则变为目标点;否则变为空白位置   }   else if (state[tp] == OBJ_BOX || state[tp] == OBJ_BOX_ON_GOAL) { // 如果移动位置为箱子,或者为箱子在目标点,并且箱子的下一个位置为空白或目标点,则可以移动     int tx2 = tx + dx;     int ty2 = ty + dy;     // 检查移动位置同方向的下一个位置是否为合法位置     if (tx2 < 0 || ty2 < 0 || tx2 >= w || ty2 >= h) { //按键无效       return;     }     int tp2 = ty2 * w + tx2;// 移动位置同方向上的下一个位置     if (state[tp2] == OBJ_SPACE || state[tp2] == OBJ_GOAL) {       // 按顺序更改三个位置的数据       state[tp2] = (state[tp2] == OBJ_GOAL) ? OBJ_BOX_ON_GOAL : OBJ_BOX;       state[tp] = (state[tp] == OBJ_BOX_ON_GOAL) ? OBJ_PLAYER_ON_GOAL : OBJ_PLAYER;       state[p] = (state[p] == OBJ_PLAYER_ON_GOAL) ? OBJ_GOAL : OBJ_SPACE;     }   } }
  好啦,今天的任务就算完成啦。但我们可以发现,这仅仅是一个初始版的游戏,还有很多可以优化改进的地方。那么我们下一次还将继续深入,对我们的第一个小游戏进行优化。
  谢谢阅读(*╹▽╹*)

6月28日油价调整最新消息会下调吗?92号汽油能跌到8元时代吗?一提到今年的石油价格,老百姓连连摇头,因为我国92号汽油已经全面涨至9元时代,而部分地区95汽油也已经进入十元时代。油价下跌也成为大家最关注的事情之一,那6月28日油价调整最新消息油价调整消息今天6月22日,调整后各地9295汽油柴油售价今天是2022年6月22日,截至本轮国内成品油价格调整计价周期的第5个工作日,原油综合变化率2。66,预计国内成品油价格将会下调0。10元升,虽然现在来说调整幅度并不多,提醒各位还婆婆说当爹妈哪有不心疼自己孩子的,可我肚子里的是你孙子啊图片来源网络01hr郭琳的大姑姐结婚,郭琳也作为娘家人去送嫁。大姑姐坐在婆婆身旁,紧紧搂着她的手臂,把脑袋搁在她的肩膀上,边流泪边撒娇说舍不得妈妈。婆婆也眼眶发红,叮嘱她结婚后要收你觉得玩弹弓是否需要讲皮筋与弹球配置?朋友们好,我是LEO弹弓户外,之前看行有一位弓友说弹弓没有配置一说,他说他8珠可以玩,9珠可以玩,10珠照样玩,不用更换皮筋,他说打出的速度都差不多,你认可这一观点吗?不管你们是否是否派人参战新竹基隆?民众党最快7月前拍板民众党立委邱臣远(左)高虹安(右)。(图片来源台湾联合报)中国台湾网6月22日讯据台湾联合报报道,备战年底县市长选举,民众党视基隆市及新竹市为可能参战地区,并点名立委邱臣远高虹安披唐山打人者陈继志的逍遥生活6月22日,尽管唐山的打人事件已过去十多天,但是还是有很多人前来观看和拍照。就在两天前,有网友发布了拍到了一段视频,老板把所有的桌子和椅子都搬走了,地面上的血迹也被打扫了一遍。据一中国试飞员驾驶西方3代机后,一番话让沈飞总师震撼葛文墉是我国空军史上赫赫有名的一位试飞员,这个职业本身就非常令人敬佩,因为试飞员本身就是叱咤风云的勇士。在上世纪八十年代,他前往西方国家试飞战机,回来后,他的一席话,更是让无数人感原来马赛克真的不能乱打,尤其是对女孩子,网友颜值真的很重要就这样的事情,你可以交给我媳妇看完之后,瞅瞅自己,属实羡慕月老牵的红线,就这样没啦男朋友送的衣服,看着样子挺不好看的鱼等会带你领略一下水里的风光花了五千请来的大厨,做出来的一道菜,地下城与勇士决斗谜之勇士角色宣传6月28日发售今日(6月22日),ArcSystemWorks格斗新作地下城与勇士决斗(DNFDuel)公布谜之勇士(LostWarrior)角色宣传片,游戏将于6月28日登录PS4PS5与St2018年,男子深夜收到前妻的微信消息,回家后发现前妻早就遇害了陈先生怎么也想不到自己居然会碰上这样的事情。当他打开卧室房门后,看到的是前妻倒在地上的尸体,似乎早就死去多时了。可就在不久前,陈先生还在手机上和前妻用微信聊天,如果前妻已经遇害了,福建舰下水背后的传奇8万吨巨型航母,从百年前的600吨木船开始6月17日,中国第三艘航空母舰福建舰下水,举世瞩目。这艘8万吨级巨型战舰的下水,标志着中国的造船水平已经达到世界一流水平。回顾150年来,一代又一代的中国人在建造一艘又一艘的船,他
超模VirginiaGallardo身穿超短比基尼大秀身材弗吉尼亚盖拉多(VirginiaGallardo)1987年9月25日出生,是一名阿根廷模特职业舞者和演员。作为迷你泳衣的爱好者,近日弗吉尼亚盖拉多在社交平台上晒出了多张一款引领潮SteamDeck风格全新Steam大屏幕模式更新现已上线经过四个月的公开Beta测试,Valve此前承诺许就的全新Steam大屏幕模式现已面向所有用户推出。新的模式为已经有些过时的UI提供了SteamDeck风格的改造。Steam大屏幕游戏直播电脑配置详解(2023年游戏直播电脑配置推荐)很多人对于游戏直播这块,可能会觉得比较偏专业领域,需要很强大的电脑硬件,必须投入很多资源等等。今天装机天下就来和大家聊聊关于游戏直播电脑配置及其它相关问题对硬件有些概念的人,还会知7个Windows电脑自带的小功能,却干掉了很多付费软件我们拿到电脑后,都会安装各种软件,却忽略了系统自带的功能,其实也非常实用。下面这7个Windows电脑自带的小功能,却干掉了很多付费软件。01。桌面分屏功能Win10系统自带的分屏秒杀系统上云,从1342ms提升到138ms小伙伴们好呀,拖拖拉拉的我,终于把秒杀项目部署到云端上去了!这次过程也比较顺利,搭建下RabbitMQ就好了。helminstallrabbitmqbitnamirabbitmqn电脑手机互传文件开源工具汇总软件分享目录1。LANDrop2。百灵快传3。anydesk4。互传5。airdroid6。Snapdrop7。Xender8。SendAnywhere9。AirMoreLANDr今春流行的鞋子,这4双最好看!百搭又时髦!嗨,各位小仙女们,大家好呀!到了春季,除了要给自己买一些新衣服之外,鞋子也是不能缺少了,那么在今年春天有哪些流行的鞋子款式呢?如果你正打算为自己挑选一双鞋子,那么下面这4双真的不要初春别再一身黑,这3种颜色正流行,显白又气质!季节的转换,使很多人都没有了搭配方向,秋冬季节流行深色系穿搭,特别是黑色,但是到了百花盛开的春季还是要多穿点亮色系的单品呀。以下这几种流行色不可错过,第一种色彩比较实用百搭,最后一2023,大展红兔!2023春夏流行色衣橱复古红秀场中的红将律动的生命色彩融美于衣时髦精们快快获取专属于你的红色衣橱一起穿红装迎好运2023,做最红的自己色彩释义盖娅传说红色作为中国人最喜欢的颜色最有代表性的中国色,在历史发展的五款在黑色星期五最值得入手的运动鞋耐克乔丹和锐步在2022年黑色星期五发布了最好的运动鞋。随着假期的临近,发布了篮球鞋和跑步鞋指南。以下是值得入手的五款最佳运动鞋。NikeDunkLowArizonaState描述Missha谜尚爆款单品红气垫亮相李佳琦直播间斩获天猫类目榜单TOP11月28日,知名韩妆品牌Missha谜尚亮相李佳琦直播间,爆款产品红气垫一上架即被热抢,产品超高性价比及优秀妆效也让李佳琦给出了补妆等于补防晒,底妆又透又亮,遮瑕力56颗星的高分评