只会C语言编程还要学哪些才能做俄罗斯方块这样的小游戏?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了只会C语言编程还要学哪些才能做俄罗斯方块这样的小游戏?相关的知识,希望对你有一定的参考价值。
我现在手头有两本书,一本是21天学通C语言(电子工业出版社)王正仲编著的。还有本是网上好评如潮的c primer plus(其实是电子PDF版),假如我把c primer plus看会了达到了能做里面所有习题的程度,那要做俄罗斯方块,还差哪些知识哪些东西要学?最好能写出还需要学习的书的全名。现在学习的程度,感觉全就是些数字,字母,代码啥的,我怎么也联想不到游戏哪些画面,动作是怎么写出来的。谢谢了。。。
熟练掌握学懂C语言,再加上 microsoft visual c++ 6 作为编译器 就可以制作出俄罗斯方块这样的小游戏。也可以制作2D游戏、 3D游戏 、动画、音乐播放器、 网站网页系统等。
C语言是一种计算机程序设计语言,属高级语言范畴。它既具有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序,代码清晰精简,十分灵活。
相关的特性:
1、对齐处理(Alignment)的标准化(包括_Alignas标志符,alignof运算符,aligned_alloc函数以及<stdalign.h>头文件。
2、_Noreturn 函数标记,类似于 gcc 的 __attribute__((noreturn))。
3、_Generic 关键字。
4、多线程(Multithreading)支持,包括:_Thread_local存储类型标识符,<threads.h>;头文件,里面包含了线程的创建和管理函数。
5、增强的Unicode的支持,基于C Unicode技术报告ISO/IEC TR 19769:2004,增强了对Unicode的支持。包括为UTF-16/UTF-32编码增加了char16_t和char32_t数据类型,提供了包含unicode字符串转换函数的头文件<uchar.h>.
6、删除了 gets() 函数,使用一个新的更安全的函数gets_s()替代。
7、增加了边界检查函数接口,定义了新的安全的函数,例如 fopen_s(),strcat_s() 等等。
8、增加了更多浮点处理宏。
9、匿名结构体/联合体支持,这个在gcc早已存在,C11将其引入标准。
10、静态断言(Static assertions),_Static_assert(),在解释 #if 和 #error 之后被处理。
11、新的 fopen() 模式,(“…x”),类似 POSIX 中的 O_CREAT|O_EXCL,在文件锁中比较常用。
12、新增 quick_exit() 函数作为第三种终止程序的方式。当 exit()失败时可以做最少的清理工作。
13、_Atomic类型修饰符和<stdatomic.h>头文件。 参考技术A 看Windows程序设计第五版,里面的代码都是用C写的
看了这个,你就可以写个俄罗斯方块了。 参考技术B 其实 你 只要 完全掌握学懂 C语言
再用 microsoft visual c++ 6 作为 编译器
什么软件 什么程序 都做得出来的
2D游戏 3D游戏 动画 音乐播放器 网站网页系统 。。。。。全都可以
你说你学的 全就是些 数字 字母 代码 。。。啥的
你没有理解 C语言 的这些 思想
我现在根本没学会 C语言 谭浩强《C程序设计》 才看了 一点点
我觉得如果我把C语言 掌握了 ,想编什么就编什么 参考技术C 看你提的问题,一点儿编程的逻辑思想都没有。
程序 = 数据结构+逻辑
俄罗斯方块的数据结构用二维数组就可以了,逻辑的话还是有点难的。建议你自己多玩多想。我就是这么做出来的。 参考技术D 这种答案也能被推荐- - C语言是基础,但是图形和这个是没关系的,只是提供了WIN API而已,你需要另外学习。
C语言只是处理简单的控制台应用 程序,如果要在PC W32上显示界面,就还要学习W32程序设计,这也是一本书,C语言。。。你学了,才能学W32程序设计,是一个基础,也可以学习C++,C++里有个MFC,VC6,是10年前的软件了,现在还用这个啊- -
W32里的图形叫做GDI,可以显示图形,但是做动画还是麻烦的,但是可以打好基础,加油!
C语言程序设计小游戏之俄罗斯方块!适合初学者上手练手!
俄罗斯方块的核心玩法非常简单,所以制作起来并不是很复杂,我准备先用2篇文字的篇幅详细讲解一下俄罗斯方块的制作方法。
今天咱们算是第一篇,主要讲解俄罗斯方块中如何定义方块,以及如何实现方块的移动、旋转、下落等操作。
1. 需求分析
俄罗斯方块中的基本逻辑非常简单,不过在介绍之前,我们先确定一下名词,防止出现词不达意的现象。
这种方块,是构成容器的基本单位,我们称之为小方块。
由四个小方块组成,用来填充容器的东西,我们叫做大方块。
用来存放大方块的地方,我们叫做容器。
定义了这三种东西之后,我们就可以这样描述俄罗斯方块这个游戏了。俄罗斯方块主要由一个存放正方形小方块的虚拟容器和实时下落的7种大方块构成。
容器的宽是 10 列,高是 20 行,行高和列宽是相等的,所以容器可以看作是 200 个正方形小方块平铺的结果。
每个实时下落的大方块都是由 4个正方形小方块组成,共 7 种固定样式,每种方块都可以旋转,所以理论上最多有 28 种样式,但其中有一些大方块在旋转的时候样式不会发生变化。
7 种大方块按照形象可以由 7种字母替代,它们是:S、Z、L、J、I、O、T。
这些大方块在下落到容器最底部或碰撞到其它容器中的小方块时会被固定在容器中,然后容器上方会重新产生一个随机的大方块,重复原来的下落流程。
当容器中出现满行的时候,整行会被消除,该行上面的所有小方块都会依次掉落。
2. 大方块的定义
俄罗斯方块中虽然基本的单位是小方块,但是所有操作的对象都是大方块,所以这里直接定义大方块的结构类型。
在定义大方块之前,我们需要先定义两个结构,分别是大方块的类型和大方块的旋转状态。
使用上面两个类型,就可以确定当前大方块的样式。除了样式之外,因为大方块会按照固定的速度移动,所以这里需要定义大方块的位置信息,加上前面两个成员,大方块可定义如下:
这里之所以没有定义大方块的下落速度是因为所有的大方块下落速度都是一样的,因此不需要在每个大方块内部都定义一个变量,只需要在外部定义一个速度变量即可。
确认了大方块的结构,我们还有一个问题需要解决,就是如何获取大方块的具体形状。
虽然大方块里面已经定义了类型和状态,但是并没有保存当前方块的形状,为了解决这个问题,我们可以定义一个全局的静态数组,数组的每一项代表一种方块的形状,算上重复的,一共可存放 28 种形状。
static unsigned short gBlockList[BT_NUM][BS_NUM];
注意这里,数组的每一项用了一个 unsigned short 类型表示。
因为大方块是由 4 个小方块组成,所以每个大方块都可以用一个 4 * 4 的二维数组来表示。
因为二维数组的每一项都只有两种状态,所以可以进一步变形,每一项用一个比特位,这样算下来,16 位比特就可以描述一个大方块的形状,而 16 位比特对应 C语言中的数据类型,正好是 unsigned short。
虽然确认了方案,但是我们还需要确认一个表达规则,就是 16 位比特串低四位是表示大方块的第一行,还是表示最后一行,又或者表示左边的列,还是右边的列。
方法很多,只需要取一个认为方便的就好,这里我是这样定义的:
即低四位表示第一行。最终我们可以求出 28 个形状对应的每一个值:
以后如果在程序中如果需要获取当前大方块的形状,只需要使用类似下面的语句:
gBlockList[i][j]
3. 大方块的操作
确定了大方块的定义,接下来就是对大方的操作实现。首先是初始化操作:
接着就是移动操作,因为我们使用两个变量来确定大方块的位置,所以代码逻辑非常简单:
除了移动,大方块还有一个常用旋转操作,因为前面我们已经使用打表法定义了所有方块的旋转状态,这里直接获取即可:
除了上面这些操作,其实还有碰撞检测以及渲染等操作。我们将在下一章节将为大家详细阐述!
如果你也想学编程,可以来我的C语言/C++编程学习基地【Q群:1083154082】!
还有免费的(源码,零基础教程,项目实战教学视频)!
涉及:游戏开发、课程设计、常用软件开发、编程基础知识、黑客等等...
以上是关于只会C语言编程还要学哪些才能做俄罗斯方块这样的小游戏?的主要内容,如果未能解决你的问题,请参考以下文章