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.非常重要 要知道你的学习的方向。