用OpenGL+C++写的一个小的3D游戏---3D贪吃蛇

在开始说之前,还是先吐吐槽吧~~正好最近事儿就多,软件工程就来一个写3D小游戏的作业~~对于我这种重来没有搞过3D的人来说简直~~要死人。。为了能够在21号前交上作业,只有边学边做了。。OpenGL从零开始,,突然有种想把这个标题改为OpenGL学习日子的冲动 。。先来个传送门吧,非常适合OpenGL零基础的朋友们http://wenku.baidu.com/link?url=27
摘要由CSDN通过智能技术生成


正好最近事儿就多,软件工程就来一个写3D小游戏的作业~~对于我这种重来没有搞过3D的人来说简直~~要死人。。

为了能够在21号前交上作业,只有边学边做了。。OpenGL从零开始,,突然有种想把这个标题改为OpenGL学习日子的冲动 。。

先来个传送门吧,非常适合OpenGL零基础的朋友们

http://wenku.baidu.com/link?url=27nsgK5MsO1wSa7qOIE4Fg1guex-D82buyfveP3viPqHLsAcXGkX7TuTvjg9rQkelfOD2RMpK0jABe1ijiwYMJs4e-T9gRCTKq3C2cqa5zO&qq-pf-to=pcqq.c2c

今天先到这里了,学OpenGL去了大哭大哭


/***************************************************************************************************************************************/


一直忘记更新学习OpenGL的一些心得了,如果有想要学习的朋友们,直接打开上面的网址就行。非常详细的教程。


         我们写的3D游戏并没有想象中的高大上啦~~~也是在二维中玩儿,但是用立体图来绘制了墙、蛇、豆子等一些物品,还有就是可以用鼠标改变视角。

<

  • 32
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 128
    评论
作者对游戏的说明: 首先,您应当以一种批判的眼光来看待本程序。这个游戏是我制作 的第一部RPG游戏,无任何经验可谈,完全按照自己对游戏的理解进 行设计的。当我参照了《圣剑英雄2》的源码之后,才体会到专业游 戏引擎的博大精深。 该程序的内核大约有2000余行,能够处理人物的行走、对话、战斗, 等等。由于该程序的结构并不适于这种规模的程序,故不推荐您详 细研究该程序。所附地图编辑器的源程序我已经添加了详细的注释, 其程序结构也比较合理,可以作为初学VC的例子。 该程序在VC的程序向导所生成的SDI框架的基础上修改而成。它没有 使用任何关于VC底层的东西。程序的绝大部分都是在CgameView类中 制作的,只有修改窗口特征的一段代码在CMainFrm类中。其他的类 统统没有用到。另外添加的一个类是CEnemy类。 整个游戏的故事情节分成8段,分别由Para1.h ~ Para8.h八个文件 实现。由于程序仅仅能够被动的处理各种各样的消息,所以情节的 实现也只能根据系统的一些参数来判断当前应当做什么。在程序中 使用了冗长的if……else if……结构来实现这种判断。 当然,在我的记录本上,详细的记录了每个事件的判断条件。这种 笨拙的设计当然是不可取的。成都金点所作《圣剑英雄II》采用了 剧本解读的方式,这才是正统的做法。但这也需要更多的编程经验 和熟练的code功夫。 下面列举的是程序编制过程中总结出来的经验和教训。 第一,对话方式应该采用《圣剑英雄II》的剧本方式。 现在的方式把一个段落中所有的对话都混在一个文件中,然后给每 句话一个号码相对应。这样做虽然降低了引擎的难度,却导致剧情的 编极其繁琐。 第二,运动和显示应当完全分开。 现在的程序中,运动和显示是完全同步的。即:在定时器中调用所有 敌人的运动函数,然后将主角的动画向前推一帧,接着绘制地图,调 用所有敌人的显示函数、重绘主角。这样的好处是不会掉帧,但带来 的问题是,如果要提高敌人的运动速度,那么帧数也跟着上去了。所 以当DEMO版反馈说速度太慢的时候,我修改起来非常困难。而这个问 题到最后也仅仅是将4步一格该成了2步一格。 第三,VC中数组存在上限。如果用“int aaa[1000000000]”定义一个 数组,编译器肯定不会给分配那么大的内存空间。而在这个程序中, 地图矩阵、NPC矩阵都超过了VC中数组的上限。但这一点知道的太晚了。 在1.0版本中已经发现地图最右端缺少了几行,但不知道是什么原因 造成的。(地图编辑器中未出现此问题,因为地图编辑器是用“序列 化”的方式存盘读盘的。)解决这个问题的方法是用“new”来分配 内存空间。 第四,由于不知道应该如何使用“new”和“delete”,几乎所有的DC 都使用了全局变量。这是完全没有必要的。程序运行期大约会耗用20 多M的内存空间,相当于一个大型游戏所使用的内存空间了。 另外,在游戏的剧情、美工方面也有许多问题,总之一个词“业余”。 我就不总结了。下一部作品,我将争取在程序上有一个质的飞跃。
### 回答1: 我很乐意,我将用C语言编一个贪吃蛇游戏。首先,我将定义一个类来描述贪吃蛇的状态,包括方向,位置和长度。然后我将定义一个函数,用于在游戏内部更新贪吃蛇的状态。随后,我将使用OpenGL和GLUT API来创建游戏的图形界面,并实现游戏的输入和游戏的渲染。最后,我将实现游戏的控制逻辑,包括蛇的移动和食物的生成。 ### 回答2: 贪吃蛇游戏是一款经典的游戏,玩家需要控制一个蛇在地图上不断吃食物以获得分数,同时要注意避免与自己的身体或者地图的边界碰撞。以下是用C语言实现贪吃蛇游戏的简要步骤: 1. 创建游戏地图: - 使用二维数组表示游戏地图,地图的每个单元格都有一个状态,如空白、蛇身、食物等。 2. 初始化游戏: - 在地图上随机生成初始蛇的位置和食物的位置,并将它们显示在对应的地图单元格上。 3. 进行游戏循环: - 通过监听键盘输入控制蛇的移动方向(上、下、左、右)。 - 根据蛇的移动方向更新蛇的位置,同时更新地图上对应的状态。 4. 处理游戏逻辑: - 判断蛇是否吃到了食物: - 若蛇头与食物的位置重合,则增加分数,同时增加蛇身长度,再在地图上随机生成新的食物。 - 判断蛇是否碰撞到了自己的身体或地图边界: - 若蛇头的位置与自己的身体或地图边界重合,则游戏结束。 5. 更新显示: - 每次更新地图状态后,根据地图的最新状态重新绘制出地图。 6. 循环执行步骤3-5直到游戏结束。 以上是用C语言实现贪吃蛇游戏的基本步骤。具体的实现细节还需考虑如何处理游戏的界面显示、实时更新、蛇身的增长等。通过灵活运用C语言的数组、循环、条件判断等基本语法,可以很好地完成贪吃蛇游戏的编。同时,还可以加入一些额外的功能,如设置难度级别、计分板、最高分记录等,以增加游戏的趣味性和挑战性。 ### 回答3: 贪吃蛇游戏是一款经典的游戏,也是许多程序设计初学者练习编程的首选项目。在C语言中,我们可以使用控制台窗口来实现一个简单的贪吃蛇游戏。 首先,我们需要定义贪吃蛇的数据结构。可以使用一个链表来表示蛇的身体,每个节点包含蛇身的坐标。同时,我们还需要定义一个表示食物位置的结构体。 接下来,我们需要初始化窗口和游戏的一些基本元素,如蛇的起始位置、食物位置、游戏得分、蛇的移动方向等。 游戏主循环中,我们需要不断从键盘输入获取用户操作,并根据用户的操作更新蛇的位置和方向。同时,判断蛇是否吃到食物,如果吃到则更新得分并生成新的食物位置。还需要判断蛇是否碰到边界或自身,如果碰到则游戏结束。 在控制台窗口中,我们可以使用象素来绘制贪吃蛇和食物。可以通过改变控制台窗口的颜色来绘制不同的元素。 为了使游戏动起来,我们可以使用延迟函数来控制蛇的移动速度,通过不断更新窗口中的元素来实现贪吃蛇的运动效果。 总之,用C语言编贪吃蛇游戏需要实现以下功能:定义数据结构、初始化游戏元素、读取用户输入、更新游戏状态、碰撞检测和绘制游戏界面等。编贪吃蛇游戏不仅可以加深对C语言的理解,也可以锻炼编程能力和逻辑思维。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 128
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值