记录一下自己写得小游戏练习心得

  1. 飞机大战

最简单的数字游戏,费事一个小时左右写完,卡在了scanf(“ %c”,&x);忘记写寻址符号。

新学:

清屏函数:system(“cls”);

随机数生成:srand(time(NULL));x=rand ()%10;

  1. 改进版本的飞机大战

增加移动靶子,和物理子弹,积分系统,用函数封装,卡死在static 用法上。

新学:

被清屏闪瞎狗眼:void gotoxy(int x,int y)  //光标移动到(x,y)位置重画以清屏

{

    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);

    COORD pos;

    pos.X = x;

    pos.Y = y;

    SetConsoleCursorPosition(handle,pos);}

用于隐藏光标防止光标闪烁:void HideCursor()

{

CONSOLE_CURSOR_INFO cursor_info = {1, 0};  // 第二个值为0表示隐藏光标

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);

}srand(time(NULL));x=rand ()%10;

需要改进:BUG调不掉,依然有时报错,调试了一整天,不知道为什么。虽然已经调到了十二点,但是就是出不来,之后注意:规避数组可能溢出的情况

如:打印时用for循环打印二维数组,而不要直接用未知数如a[x][y]打印(下标经常越界),统一打印不容易出错,虽然我死活不明白我到底错在哪儿,血的教训。

  1. 弹球游戏

由网课上给的飞机大战代码改过来,所以十分顺利。

新学:

暂停函数:Sleep(100);(替代count一点也不好使哈哈哈还是count吧)

宏常量:#define PI 3.1415

音效:printf("\a"); // 响铃

Const常量:const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。另外CONST在其他编程语言中也有出现,如C++、PHP5、C#.net、HC08 C。

  (1)可以定义const常量,具有不可变性。

  例如:const int Max=100; Max++会产生错误;

  (2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。

  例如: void f(const int i) { .........} 编译器就会知道i是一个常量,不允许修改;

  (3)可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。 同宏定义一样,可以做到不变则已,一变都变!

  (4)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。 还是上面的例子,如果在函数体内修改了i,编译器就会报错;

  例如: void f(const int i) { i=10;//error! }

静态局部变量有以下特点:

该变量在全局数据区分配内存;

静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;

静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;

它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束;

int Myclass::Sum = 0; //在类外定义并初始化静态数据成员

注意的地方:1.出现在类外的函数定义不能指定关键字 static。2.静态成员可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数。3.非静态成员函数可以任意访问静态数据成员和静态成员函数。静态成员函数没有额外的this指针。

全局变量和全局静态变量的区别:

1)全局变量是不显式用static修饰的全局变量,全局变量默认是有外部链接性的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过extern 全局变量名的声明,就可以使用全局变量。

2)全局静态变量是显式用static修饰的全局变量,作用域是声明此变量所在的文件,其他的文件即使用extern声明也不能使用。

需要改进:板子移动太慢了。

  1. 坚持100秒

新学:

可以加入一点随机扰动,防止所有的飞机聚在一起:用随机数解决

记录时间:初始化时startTime = clock();结束时endTime = clock();

printf("你坚持了:%.3f秒!\n", (endTime - startTime) / 1000.0);

  1. 消砖块的弹球游戏

需要改进:弹球打在砖块上无法反弹,只有经过砖块下面一格才会反弹,比较鬼畜哈哈。

  1. 空战游戏

失去耐心了【捂脸。

新学:

二维数组存储游戏画布中对应的元素:0为空格,1为飞机*,2为子弹|,3为敌机@

每次都要记着:只有得分之后才用判断升不升级啊加不加快啊啥的。

  1. Easyx!

终于到这里啦,首先画了围棋与国际象棋棋盘。

新学:

解决刷屏问题:BeginBatchDraw();//开始批量绘制。执行后,任何绘图操作都将暂时不输出到屏幕上,直到执行以下两个函数才将之前的绘图输出。

FlushBatchDraw();//输出绘图

EndBatchDraw();//结束绘图

 

  1. 实时钟表

新学:

获取当前时间:SYSTEMTIME ti;                       // 定义变量保存当前时间GetLocalTime(&ti);      

鼠标交互:MOUSEMSG m;

If(MouseHit())

m=GetMouseMsg();

m.uMsg==WM_MOUSEMOVE

m.uMsg==WM_LBUTTONDOWN//左键按下

m.uMsg==WM_RBUTTONDOWN//右键抬起

  1. Flappy bird

由素材更改过来,还算容易。非常开心,这是我做的第一个有界面的游戏。

新学:

写路径的格式:"open \"C:\\Users\\Administrator\\Desktop\\程序员表白程序\\白 白,我表白.wav\" alias aa"血的教训,多写两个杠就可以规避文件夹有空格的问题。

猜你喜欢

转载自blog.csdn.net/Royal_ga/article/details/82818086