C语言编程学习打造—人工智能版贪吃蛇小游戏

C语言是面向过程的,而C++是面向对象的

C和C++的区别:

C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。

C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。

C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。

总感觉我写个这样的贪吃蛇,没多大用处额,自动版本的,自己玩的贪吃蛇游戏,涉及的知识点也并不是很多的,记得安装好图形库哈,我下面把代码发出来,你们自己去运行吧,顺带最后我也说下运用到的C语言知识点,总结一下

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

小编推荐一个学C语言/C++的学习裙【 二六三,六八八,二七六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

*文件名称:main.cpp

*文件描述:C语言实现图形界面的贪吃蛇

*编译环境:VS2013 && 图形界面

*最后修改:

*<2016年11月26日> <创建工程> <某某某>

*

*1.图形界面是一个图形库,在最初的TC2.0中.

*2.刚开始学习,控制台应用程序。

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

#include

#include

#include

#include

//播放音乐的头文件以及库文件

#include

#pragma comment(lib,"winmm.lib")

#define SNAKEMAX 1000 //蛇的最大长度为1000

//结构体

//蛇的方向

typedef enum ch

{

up = 72,

down =80,

left =75,

right =77

}CH;

//坐标

typedef struct Coor

{

int x;

int y;

}COOR;

//蛇的身体

struct SNAKE

{

COOR sc[SNAKEMAX];//1000节蛇的坐标

int n;//当前的节数

CH ch;//蛇的方向

}Snake;

struct FOOD

{

COOR fc;//食物的坐标 //食物每时每刻都只有一个对不对?

int flag;//判断食物是否被吃掉

}Food;

//对程序进行初始化 每一个程序都要有一个初始化的函数

void GameInit()

{

//软件工程师 硬件的声卡 微软公司为软件的程序员提供这些接口

mciSendString(L"open 甩葱歌.mp3 alias bgm", 0, 0, 0); //打开文件

mciSendString(L"play bgm repeat", 0, 0, 0);

setbkcolor(RGB(220,120,150));

cleardevice(); //用指定的背景颜色刷新整个界面

//初始化一条小蛇

rectangle(0, 0, 10, 10); //始终都是0 0 10 10

//最开始蛇的坐标

Snake.sc[0].x = 0;

Snake.sc[0].y = 0;

Snake.n = 1; //蛇当前的节数为10

Snake.ch = right;

//初始化食物

Food.flag = 0; //食物被吃掉

}

//输出蛇

void SnakeDraw()

{

//Snake.n =15 i的初始值15 0-14

for (int i = Snake.n - 1; i >= 0; i--) //循环15

{

rectangle(Snake.sc[i].x, Snake.sc[i].y,

Snake.sc[i].x + 10, Snake.sc[i].y + 10);

}

}

//蛇移动的坐标计算

void SnakeMove()

{

//让前面一节蛇的坐标赋值给后面一节蛇

for (int i = Snake.n-1 ; i > 0; i--) //n=6 4

{

Snake.sc[i].x = Snake.sc[i - 1].x;

Snake.sc[i].y = Snake.sc[i - 1].y;

}

//根据当前方向来判断蛇头应该怎么移动

switch (Snake.ch)

{

case right:

Snake.sc[0].x += 10;break;

case left:

Snake.sc[0].x -= 10;break;

case up:

Snake.sc[0].y -= 10;break;

case down://速度 单位时间内的位移 单位时间内获取到的知识量。

Snake.sc[0].y += 10;break;

default:

break;

}

SnakeDraw();

}

void ChangeSnake()

{

int input; //定义键盘的输入

input = getch(); //不行 getch()回车 getchar()显示回文

switch (input)

{

case up:

if (Snake.ch != down)

{

Snake.ch = up;

}

break;

case down:

if (Snake.ch != up)

{

Snake.ch = down;

}

break;

case left:

if (Snake.ch != right)

{

Snake.ch = left;

}

break;

case right:

if (Snake.ch != left)

{

Snake.ch = right;

}

break;

}

}

//随机得到食物的坐标

void FoodCoor()

{

Food.fc.x = rand() % (640 / 10) * 10;

Food.fc.y = rand() % (480 / 10) * 10;

Food.flag = 1; //食物已经出现

}

void DrawFood()

小编推荐一个学C语言/C++的学习裙【 二六三,六八八,二七六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

{

roundrect(Food.fc.x, Food.fc.y, Food.fc.x + 10, Food.fc.y + 10, 10, 10);

}

int FoodEat()

{

if (Snake.sc[0].x == Food.fc.x&&Snake.sc[0].y == Food.fc.y)

{

Snake.n++;

Food.flag = 0;

}

return Food.flag;

}

void BreakSnake()

{

//撞墙

if (Snake.sc[0].x<0 || Snake.sc[0].x>630 || Snake.sc[0].y<0 || Snake.sc[0].y>470)

{

closegraph();

exit(0);

}

//撞自己

for (int i = Snake.n - 1; i > 0; i--)

{

if (Snake.sc[0].x == Snake.sc[i].x&&Snake.sc[0].y == Snake.sc[i].y)

{

closegraph();

exit(0);

}

}

}

void change()

{

switch (Snake.ch)

{

case up:

if (Food.fc.x < Snake.sc[0].x&&Food.fc.y >= Snake.sc[0].y) //左下

Snake.ch = left;

else if (Food.fc.x > Snake.sc[0].x&&Food.fc.y >= Snake.sc[0].y) //左下

Snake.ch = right;

else if (Food.fc.x == Snake.sc[0].x&&Food.fc.y > Snake.sc[0].y)

{

int d;

d = rand() % 2;

if (d == 0)

Snake.ch = right;

else

Snake.ch = left;

}

break;

case down:

if (Food.fc.x < Snake.sc[0].x&&Food.fc.y <= Snake.sc[0].y) //左上

Snake.ch = left;

else if (Food.fc.x > Snake.sc[0].x&&Food.fc.y <= Snake.sc[0].y) //右上

Snake.ch = right;

else if (Food.fc.x == Snake.sc[0].x&&Food.fc.y < Snake.sc[0].y) //后面

{

int d;

d = rand() % 2;

if (d == 0)

Snake.ch = right;

else

Snake.ch = left;

}

break;

case left:

if (Food.fc.x >= Snake.sc[0].x&&Food.fc.y < Snake.sc[0].y) //右上

Snake.ch = up;

else if (Food.fc.x >= Snake.sc[0].x&&Food.fc.y>Snake.sc[0].y) //右下

Snake.ch = down;

else if (Food.fc.x > Snake.sc[0].x&&Food.fc.y == Snake.sc[0].y) //后面

{

//y ==0 down

//y==470 up

//其他情况 随机

int d;

d = rand() % 2;

if (d == 0)

Snake.ch = up;

else

Snake.ch = down;

}

break;

case right:

if (Food.fc.x <= Snake.sc[0].x&&Food.fc.y < Snake.sc[0].y) //左上

Snake.ch = up;

else if (Food.fc.x <= Snake.sc[0].x&&Food.fc.y>Snake.sc[0].y) //左下

Snake.ch = down;

else if (Food.fc.x <= Snake.sc[0].x&&Food.fc.y == Snake.sc[0].y)

{

//y ==0 down

//y==470 up

//其他情况 随机

int d;

d = rand() % 2;

if (d == 0)

Snake.ch = up;

else

Snake.ch = down;

}

break;

default:

break;

}

}

int main()

{

initgraph(640, 480);

srand((unsigned int)time(NULL));

//计算机很笨 速度快

//图形 图片 计算不认识

//最擅长的事情就是处理数据

GameInit();

while (1)

{

while (!kbhit())

{

cleardevice();

if (Food.flag==0) //被吃掉

{

FoodCoor();

}

DrawFood();

SnakeMove();

FoodEat();

//BreakSnake();

change();

Sleep(100);

}

ChangeSnake();

}

getchar();

closegraph();

return 0;

}

程序运行的效果图发出来一下,就感觉很简单的,效果不是很高大上

小编推荐一个学C语言/C++的学习裙【 二六三,六八八,二七六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

程序里面,蛇的注意点的话,1.用一个数组来存放蛇的信息(坐标)。2.用for循环时刻的绘制蛇。

3.移动 除蛇头外,其他部位用for循环让前一节蛇的坐标赋值给后面一节蛇的坐标,只要改变蛇头,后面的蛇会相应的移动。4.通过按键,来改变蛇的方向。

涉及到的知识点也并不是很多的呢,1、C语言三大控制结构:顺序结构,分支结构,循环结构 2、C语言基本语法 3、自定义类型结构体 4、图形库界面。

最后的话给刚刚学习C语言的同伴们,一些建议吧,怎么去学,就给小小的意见,1.语法:要快 C语言 C++语言 3个月 2.学的过程当中,怎样去加强记忆。用嘛。连连看 推箱子 贪吃蛇 俄罗斯方块全部写一遍。 3.敢于区接触新的东西。 4.非常重要 要知道你的学习的方向。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349