用200行C语言代码实现贪吃蛇——2.0(EasyX基本版)

1.前言

这个版本使用了EasyX图形库,使动画效果更加丰富,更加接近真实的小游戏。当然这个“小游戏”并不是真正意义上的小游戏,只是个人对C语言的一些理解与应用。本人水平不高,通过博客来分享自己的学习成果,也算是一种复习。

如果大家不知道什么是EasyX图形库,或者说不知道怎么安装、怎么使用,大家可以去网络上搜索一下。安装过程非常简单,使用起来仅仅针对于贪吃蛇这个项目而言,只需要引头文件,和使用头文件里面的库函数。与#include <stdio.h>然后使用printf函数没什么区别。

需要注意的是,EasyX图形库之适用于C++,但我们可以用C语言的语法。意思就是说,我们需要创建的文件必须是cpp的格式,但我们可以用C的语法。

2.游戏效果

在1.0版本中,我们是在控制台窗口下运行的。并且运用到数组。通过数组的状态来描绘空地、食物、蛇的。并且黑框框影响美观、并不好看。并且因为用到了system("cls")清屏,所以屏幕会一卡一卡抽搐,非常影响视觉。

但是在2.0版本中,我们运用了EasyX图形库,这就使得我们不通过控制台那个黑框框来输出图像,而是用EasyX图形库里面的库函数。上下两个GIF动图都是60FPS,但是不难发现2.0版本无论是动画、还是灵敏度,都要优于1.0。

 3.设计思路

3.1界面设置

我们先将需要的头文件写在head.h头文件底下。

#define _CRT_SECURE_NO_WARNINGS 1
#include <easyx.h>//EasyX图形库头文件
#include <stdio.h>

随后我们在主函数main.cpp底下操作。

#include "head.h"
int main()
{
	initgraph(640, 480);//初始化窗口大小,现在为640*480分辨率
	setbkcolor(RGB(255, 148, 209));//设置背景色
	cleardevice();//使用背景色清屏

	//防闪退
	getchar();
	closegraph();
	return 0;
}

 那么我们就得到:

 3.2绘制一条蛇出来

在绘制蛇之前先讲一个知识点。

 这个窗口是有 x、y轴的,并且值增加的方向跟箭头同向。意思就是说,越往右边,x越大;越往下面,y越大。

由此分析,蛇不能够像1.0版本那样用数组来描绘状态了,需要用坐标来描绘蛇。

我们在头文件head.h下定义蛇的结构体,因为需要使用坐标,也同时定义一个坐标结构体:

#define _CRT_SECURE_NO_WARNINGS 1
#include <easyx.h>//EasyX图形库头文件
#include <stdio.h>

#define NUM 200//默认蛇有200个坐标

//坐标的结构体
struct Coor
{
	int x;
	int y;
};

//蛇的结构体
struct Snake
{
	//蛇结构包括
	int len;//长度
	int direc;//方向
	Coor cr[NUM];//坐标
	//一条蛇有N节,每节都有自己的坐标,所以定义一个坐标数组
};

现在蛇的结构已经弄好,接下来就要初始化,也就是把蛇放在哪个位置。

我们在源文件mian.cpp中进入初始化:

#include "head.h"
int main()
{
	initgraph(640, 480);//初始化窗口大小,现在为640*480分辨率
	setbkcolor(RGB(255, 148, 209));//设置背景色
	cleardevice();//使用背景色清屏

	Init_Game();//初始化

	//防闪退
	getchar();
	closegraph();
	return 0;
}

在头文件head.h中的部分函数声明与宏定义:

#define _CRT_SECURE_NO_WARNINGS 1
#include <easyx.h>//EasyX图形库头文件
#include <stdio.h>

#define NUM 200//默认蛇有200个坐标

//宏定义各个方向。与1.0不同的是,本版本使用方向键控制的
#define UP 72
#define DOWN 80
#define LEFT 75
#define RIGHT 77

//坐标的结构体
struct Coor
{
	int x;
	int y;
};

//蛇的结构体
struct Snake
{
	//蛇结构包括
	int len;//长度
	int direc;//方向
	Coor cr[NUM];//坐标
	//一条蛇有N节,每节都有自己的坐标,所以定义一个坐标数组
};

void Init_Game();//初始化函数声明

 现在需要在源文件function.cpp中配置初始化函数:

#include "head.h"

Snake snake;//创建蛇的结构体变量
void Init_Game()
{
	snake.len = 3;//初始化长度

	snake.direc = RIGHT;//初始化方向

	//初始化蛇头坐标
	snake.cr[0].x = 100;
	snake.cr[0].y = 100;

	//蛇身坐标
	snake.cr[1].x = 90;
	snake.cr[1].y = 100;
	snake.cr[2].x = 80;
	snake.cr[2].y = 100;
}

现在有了蛇的详细信息,就要开始着手在窗口把蛇绘制出来了,我们从主函数进入绘制函数:

#include "head.h"

int main()
{
	initgraph(640, 480);//初始化窗口大小,现在为640*480分辨率
	setbkcolor(RGB(255, 148, 209));//设置背景色
	cleardevice();//使用背景色清屏

	Init_Game();//初始化
	Draw_Game();//绘制

	//防闪退
	getchar();
	closegraph();
	return 0;
}

要在头文件中进行函数声明,但是这里省略。

现在需要在function.cpp中配置绘制函数:

void Draw_Game()
{
	for (int i = 0; i < snake.len; i++)
	{
		if (i == 0)//如果是蛇头
		{
			setfillcolor(RED);//填充颜色为红色
			//绘制实心矩形,填充颜色为红色
			fillrectangle(snake.cr[i].x, snake.cr[i].y, snake.cr[i].x + SIZE, snake.cr[i].y + SIZE);//这里的SIZE我在头文件head.h中宏定义为10了
			//四个参数为:    x坐标           y坐标           宽                       高
		}
		else
			rectangle(snake.cr[i].x, snake.cr[i].y, snake.cr[i].x + SIZE, snake.cr[i].y + SIZE);//绘制非实心矩形

	}
}

那么绘制出来的效果就是这样:

 3.3蛇移动的实现

我们在初始化中,让蛇的移动方向为右。

现在我们需要分析蛇是如何移动的。

 

我们现在需要通过源文件main.cpp进入移动函数。注意:移动与绘制,是一个循环过程。

#include "head.h"

int main()
{
	initgraph(640, 480);//初始化窗口大小,现在为640*480分辨率
	setbkcolor(RGB(255, 148, 209));//设置背景色
	cleardevice();//使用背景色清屏

	Init_Game();//初始化

	while (1)
	{
		Move_Snake();//移动蛇
		Draw_Game();//绘制
		Sleep(100);
	}

	//防闪退
	getchar();
	closegraph();
	return 0;
}

在头文件head.h中要引用Sleep函数的头文件,以及移动蛇的函数声明。这里省略。

最后在源文件function.cpp中配置移动蛇函数:


void Move_Snake()
{
	cleardevice();//以当前背景色清屏
	for (int i = snake.len-1; i > 0; i--)
	{
		snake.cr[i].x = snake.cr[i - 1].x;
		snake.cr[i].y = snake.cr[i - 1].y;
	}//数组下标是从 0~n-1 的,所以从i=snake.len-1开始。为什么i要>0而不是>=0
	//是因为在循环里面的语句中,有i-1的操作。最后一次是把snake.cr[0]的坐标给snake.cr[1],如果写>=0,就会产生把 snake.cr[-1]的坐标给snake.cr[0]

	//蛇头的坐标没有了,现在要产生新的蛇头坐标
	switch (snake.direc)
	{
	case UP:
		snake.cr[0].y -= SIZE;
		break;
	case DOWN:
		snake.cr[0].y += SIZE;
		break;
	case LEFT:
		snake.cr[0].x -= SIZE;
		break;
	case RIGHT:
		snake.cr[0].x += SIZE;
		break;
	}
}

现在实现了蛇向右移动的功能,那么效果是这样的:

 

现在我们需要控制蛇的方向。我们从源文件main.cpp进入控制蛇的函数:

#include "head.h"

int main()
{
	initgraph(640, 480);//初始化窗口大小,现在为640*480分辨率
	setbkcolor(RGB(255, 148, 209));//设置背景色
	cleardevice();//使用背景色清屏

	Init_Game();//初始化

	while (1)
	{
		if (_kbhit())//如果键盘被敲击就进入控制方向函数
			Change_Move();//控制蛇
		else
		{
			Move_Snake();//移动蛇
			Draw_Game();//绘制
			Sleep(100);
		}
		
	}

	//防闪退
	getchar();
	closegraph();
	return 0;
}

 我们需要在头文件head.h中定义_kbhit函数的头文件以及控制蛇的函数声明。这里省略。

现在要在源文件function.cpp中配置控制蛇函数:

void Change_Move()
{
	int key = 0;
	key = _getch();//接收键盘值
	switch (key)
	{
	case UP:
		if (snake.direc != DOWN)//如果蛇正在往下,就不能改变方向。
			snake.direc = UP;
		break;
	case DOWN:
		if (snake.direc != UP)//如果蛇正在往上,就不能改变方向。
			snake.direc = DOWN;
		break;
	case LEFT:
		if (snake.direc != RIGHT)//如果蛇正在往右,就不能改变方向
			snake.direc = LEFT;
		break;
	case RIGHT:
		if (snake.direc != LEFT)//如果蛇正在往左,就不能改变防线
			snake.direc = RIGHT;
		break;
	}
}

 那么实现的效果是这样的:

3.4食物的生成

食物的生成很简单:第一次初始化生成,我们可以在初始化函数中完成。后续就是蛇吃掉食物后再随机生成。

需要注意的是:我们的蛇是以10为单位移动的,并且每一节的大小都是10*10。我们的食物也要匹配蛇的大小。 

判断食物被是否被吃掉非常简单,只要判断蛇头与食物的坐标是否重合就行。

但是我们难就难在定义食物。

在1.0版本中,我们用数组描绘食物的状态。

但是在本版本中,需要使用结构体,因为食物也包含坐标。

所以这里在头文件head.h中定义食物的结构体(包含上面省略的头文件和函数声明):

#define _CRT_SECURE_NO_WARNINGS 1
#include <easyx.h>//EasyX图形库头文件
#include <stdio.h>
#include <windows.h>//Sleep头文件
#include <conio.h>//kbhit、getch头文件
#define NUM 200//默认蛇有200个坐标

//宏定义各个方向。与1.0不同的是,本版本使用方向键控制的
#define UP 72
#define DOWN 80
#define LEFT 75
#define RIGHT 77

#define SIZE 10
//坐标的结构体
struct Coor
{
	int x;
	int y;
};

//蛇的结构体
struct Snake
{
	//蛇结构包括
	int len;//长度
	int direc;//方向
	Coor cr[NUM];//坐标
	//一条蛇有N节,每节都有自己的坐标,所以定义一个坐标数组
};

//食物的结构体
struct Food
{
	//因为食物它永远只有一个,所以不需要数组
	int x;
	int y;
	int eat;//确定是否被吃
};
void Init_Game();//初始化函数声明
void Draw_Game();//绘制蛇函数声明
void Move_Snake();//蛇移动函数声明
void Change_Move();//控制蛇函数声明

 我们要在源文件function.cpp中对食物初始化:

#include "head.h"

Snake snake;//创建蛇的结构体变量
Food food;//创建食物的结构体变量
void Init_Game()
{
	snake.len = 3;//初始化长度

	snake.direc = RIGHT;//初始化方向

	//初始化蛇头坐标
	snake.cr[0].x = 100;
	snake.cr[0].y = 100;

	//蛇身坐标
	snake.cr[1].x = 90;
	snake.cr[1].y = 100;
	snake.cr[2].x = 80;
	snake.cr[2].y = 100;

	food.eat = 1;//初始化食物是被吃的

}

在绘制之前我们需要定义一下食物的坐标在哪,也就是需要在源文件main.cpp中进入创建食物函数:

定义好了食物的坐标,现在又要回到绘制函数把食物绘制出来:

void Draw_Game()
{
	for (int i = 0; i < snake.len; i++)
	{
		if (i == 0)//如果是蛇头
		{
			setfillcolor(RED);//填充颜色为红色
			//绘制实心矩形,填充颜色为红色
			fillrectangle(snake.cr[i].x, snake.cr[i].y, snake.cr[i].x + SIZE, snake.cr[i].y + SIZE);//这里的SIZE我在头文件head.h中宏定义为10了
			//四个参数为:    x坐标           y坐标           宽                       高
		}
		else
			rectangle(snake.cr[i].x, snake.cr[i].y, snake.cr[i].x + SIZE, snake.cr[i].y + SIZE);//绘制非实心矩形
	}
	//绘制食物
	setfillcolor(GREEN);//填充颜色为绿色
	fillroundrect(food.x, food.y, food.x + SIZE, food.y + SIZE, 5, 5);//圆角矩形
	//6个参数为:  x坐标   y坐标      宽              高       这两个是圆角的程度
}

此时的运行效果就是这样的:

 3.5吃食物以及蛇身加长

这个部分非常简单。

我们先从源文件main.cpp中进入判断是否吃到食物函数:

#include "head.h"

int main()
{
	initgraph(640, 480);//初始化窗口大小,现在为640*480分辨率
	setbkcolor(RGB(255, 148, 209));//设置背景色
	cleardevice();//使用背景色清屏

	Init_Game();//初始化
	srand((unsigned int)time(NULL));
	while (1)
	{
		if (_kbhit())//如果键盘被敲击就进入控制方向函数
			Change_Move();//控制蛇
		else
		{
			Produce_Food();//创建食物
			Eat_Food();//判断食物是否被吃
			Move_Snake();//移动蛇
			Draw_Game();//绘制
			Sleep(100);
		}
		
	}

	//防闪退
	getchar();
	closegraph();
	return 0;
}

我们需要在头文件head.h下进行函数声明。这里省略。

随后在源文件function.cpp中配置是否被吃函数:

void Eat_Food()
{
	if (snake.cr[0].x == food.x && snake.cr[0].y == food.y)//如果蛇头的位置是食物
	{
		food.eat = 1;//食物的状态更新为被吃
		snake.len += 1;//蛇身长度+1
	}
}

3.6判断蛇头是否撞墙或自己

这个模块与1.0版本一摸一样,判断函数都需要一个变量来接收返回值。

我们在源文件main.cpp中观察逻辑:

#include "head.h"

int main()
{
	initgraph(640, 480);//初始化窗口大小,现在为640*480分辨率
	setbkcolor(RGB(255, 148, 209));//设置背景色
	cleardevice();//使用背景色清屏

	Init_Game();//初始化
	srand((unsigned int)time(NULL));
	int n = 0;
	while (1)
	{
		if (_kbhit())//如果键盘被敲击就进入控制方向函数
			Change_Move();//控制蛇
		else
		{
			Produce_Food();//创建食物
			Eat_Food();//判断食物是否被吃
			n = GameOver();//判断蛇头是否撞墙或自己
			if (n == 1)//返回1则撞墙或自己
			{
				closegraph();//关闭窗口
				printf("游戏结束\n");//控制台打印
				break;//结束循环
			}
			else
			{
				Move_Snake();//移动蛇
				Draw_Game();//绘制
				Sleep(100);
			}
			
		}
		
	}

	//防闪退
	getchar();
	closegraph();
	return 0;
}

我们需要在头文件head.h下进行函数声明。这里省略。

然后就是在源文件funtion.cpp中配置函数:

int GameOver()
{
	if (snake.cr[0].x < 0 || snake.cr[0].y < 0 || snake.cr[0].x>640 || snake.cr[0].y>480)//如果撞墙
	{
		return 1;//返回1
	}
	for (int i = 1; i < snake.len; i++) 
	{
		if (snake.cr[0].x == snake.cr[i].x && snake.cr[0].y == snake.cr[i].y)//如果撞自己
			return 1;//返回1
	}
	return 0;//否则返回0
}

4.完整代码

4.1头文件head.h

#define _CRT_SECURE_NO_WARNINGS 1
#include <easyx.h>//EasyX图形库头文件
#include <stdio.h>
#include <windows.h>//Sleep头文件
#include <conio.h>//kbhit、getch头文件
//srand函数需要的头文件
#include <stdlib.h>
#include <time.h>

#define NUM 200//默认蛇有200个坐标

//宏定义各个方向。与1.0不同的是,本版本使用方向键控制的
#define UP 72
#define DOWN 80
#define LEFT 75
#define RIGHT 77

#define SIZE 10
//坐标的结构体
struct Coor
{
	int x;
	int y;
};

//蛇的结构体
struct Snake
{
	//蛇结构包括
	int len;//长度
	int direc;//方向
	Coor cr[NUM];//坐标
	//一条蛇有N节,每节都有自己的坐标,所以定义一个坐标数组
};

//食物的结构体
struct Food
{
	//因为食物它永远只有一个,所以不需要数组
	int x;
	int y;
	int eat;//确定是否被吃
};
void Init_Game();//初始化函数声明
void Draw_Game();//绘制蛇函数声明
void Move_Snake();//蛇移动函数声明
void Change_Move();//控制蛇函数声明
void Produce_Food();//创建食物的函数声明
void Eat_Food();//食物是否被吃的函数声明
int GameOver();//判断是否撞墙或自己的函

4.2源文件main.cpp

#include "head.h"

int main()
{
	initgraph(640, 480);//初始化窗口大小,现在为640*480分辨率
	setbkcolor(RGB(255, 148, 209));//设置背景色
	cleardevice();//使用背景色清屏

	Init_Game();//初始化
	srand((unsigned int)time(NULL));
	int n = 0;
	while (1)
	{
		if (_kbhit())//如果键盘被敲击就进入控制方向函数
			Change_Move();//控制蛇
		else
		{
			Produce_Food();//创建食物
			Eat_Food();//判断食物是否被吃
			n = GameOver();//判断蛇头是否撞墙或自己
			if (n == 1)//返回1则撞墙或自己
			{
				closegraph();//关闭窗口
				printf("游戏结束\n");//控制台打印
				break;//结束循环
			}
			else
			{
				Move_Snake();//移动蛇
				Draw_Game();//绘制
				Sleep(100);
			}
			
		}
		
	}

	//防闪退
	getchar();
	closegraph();
	return 0;
}

4.3源文件function.cpp

#include "head.h"

Snake snake;//创建蛇的结构体变量
Food food;//创建食物的结构体变量
void Init_Game()
{
	snake.len = 3;//初始化长度

	snake.direc = RIGHT;//初始化方向

	//初始化蛇头坐标
	snake.cr[0].x = 100;
	snake.cr[0].y = 100;

	//蛇身坐标
	snake.cr[1].x = 90;
	snake.cr[1].y = 100;
	snake.cr[2].x = 80;
	snake.cr[2].y = 100;

	food.eat = 1;//初始化食物是被吃的

}

void Draw_Game()
{
	for (int i = 0; i < snake.len; i++)
	{
		if (i == 0)//如果是蛇头
		{
			setfillcolor(RED);//填充颜色为红色
			//绘制实心矩形,填充颜色为红色
			fillrectangle(snake.cr[i].x, snake.cr[i].y, snake.cr[i].x + SIZE, snake.cr[i].y + SIZE);//这里的SIZE我在头文件head.h中宏定义为10了
			//四个参数为:    x坐标           y坐标           宽                       高
		}
		else
			rectangle(snake.cr[i].x, snake.cr[i].y, snake.cr[i].x + SIZE, snake.cr[i].y + SIZE);//绘制非实心矩形
	}
	//绘制食物
	setfillcolor(GREEN);//填充颜色为绿色
	fillroundrect(food.x, food.y, food.x + SIZE, food.y + SIZE, 5, 5);//圆角矩形
	//6个参数为:  x坐标   y坐标      宽              高       这两个是圆角的程度
}

void Move_Snake()
{
	cleardevice();//以当前背景色清屏
	for (int i = snake.len-1; i > 0; i--)
	{
		snake.cr[i].x = snake.cr[i - 1].x;
		snake.cr[i].y = snake.cr[i - 1].y;
	}//数组下标是从 0~n-1 的,所以从i=snake.len-1开始。为什么i要>0而不是>=0
	//是因为在循环里面的语句中,有i-1的操作。最后一次是把snake.cr[0]的坐标给snake.cr[1],如果写>=0,就会产生把 snake.cr[-1]的坐标给snake.cr[0]

	//蛇头的坐标没有了,现在要产生新的蛇头坐标
	switch (snake.direc)
	{
	case UP:
		snake.cr[0].y -= SIZE;
		break;
	case DOWN:
		snake.cr[0].y += SIZE;
		break;
	case LEFT:
		snake.cr[0].x -= SIZE;
		break;
	case RIGHT:
		snake.cr[0].x += SIZE;
		break;
	}
}

void Change_Move()
{
	int key = 0;
	key = _getch();//接收键盘值
	switch (key)
	{
	case UP:
		if (snake.direc != DOWN)//如果蛇正在往下,就不能改变方向。
			snake.direc = UP;
		break;
	case DOWN:
		if (snake.direc != UP)//如果蛇正在往上,就不能改变方向。
			snake.direc = DOWN;
		break;
	case LEFT:
		if (snake.direc != RIGHT)//如果蛇正在往右,就不能改变方向
			snake.direc = LEFT;
		break;
	case RIGHT:
		if (snake.direc != LEFT)//如果蛇正在往左,就不能改变防线
			snake.direc = RIGHT;
		break;
	}
}

void Produce_Food()
{
	int func = 0;//用来判断食物的坐标是否与蛇的坐标重合
	if (food.eat == 1)
	{
		while (1)
		{
			food.x = rand() % 64 * 10;//rand()%64的区间在0~63,再*10可实现坐标以10为间隔生成坐标   0  10  20...
			food.y = rand() % 48 * 10;//rand()%48的区间在0~46,再*10可实现坐标以10为间隔生成坐标   0  10  20...
			for (int i = 0; i < snake.len; i++)
			{
				if (food.x == snake.cr[i].x && food.y == snake.cr[i].y)
				{
					func = 1;//如果但凡有坐标重合,func改变为1,表重合
					break;//退出for循环
				}
			}
			if (func == 0)//如果没有重合
			{
				food.eat = 0;//食物就要变为未被吃的状态
				break;
			}
		}
	}
}

void Eat_Food()
{
	if (snake.cr[0].x == food.x && snake.cr[0].y == food.y)//如果蛇头的位置是食物
	{
		food.eat = 1;//食物的状态更新为被吃
		snake.len += 1;//蛇身长度+1
	}
}

int GameOver()
{
	if (snake.cr[0].x < 0 || snake.cr[0].y < 0 || snake.cr[0].x>640 || snake.cr[0].y>480)//如果撞墙
	{
		return 1;//返回1
	}
	for (int i = 1; i < snake.len; i++) 
	{
		if (snake.cr[0].x == snake.cr[i].x && snake.cr[0].y == snake.cr[i].y)//如果撞自己
			return 1;//返回1
	}
	return 0;//否则返回0
}

  • 50
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论
经典的C资源,很全面详细 对于初学者来说,太重要了! 第一部分 基础篇 001 第一个C程序 002 运多个源文件 003 求整数之积 004 比较实数大小 005 字符的输出 006 显示变量所占字节数 007 自增/自减运算 008 数列求和 009 乘法口诀表 010 猜数字游戏 011 模拟ATM(自动柜员机)界面 012 用一维数组统计学生成绩 013 用二维数组实现矩阵转置 014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 寻找指定元素的指针 025 寻找相同元素的指针 026 阿拉伯数字转换为罗马数字 027 字符替换 028 从键盘读入实数 029 字符 030 字符排列 031 判断字符串是否回文 032 通讯录的输入输出 033 扑克牌的结构表示 034 用“结构”统计学生成绩 035 报数游戏 036 模拟社会关系 037 统计文件的字符数 038 同时显示两个文件的内容 039 简单的文本编辑器 040 文件的字数统计程序 041 学生成绩管理程序 第二部分 数据结构篇 042 插入排序 043 希尔排序 044 冒泡排序 045 快速排序 046 选择排序 047 堆排序 048 归并排序 049 基数排序 050 二叉搜索树操作 051 二项式系数递归 052 背包问题 053 顺序表插入和删除 054 链表操作(1) 055 链表操作(2) 056 单链表就地逆置 057 运动会分数统计 058 双链表 059 约瑟夫环 060 记录个人资料 061 二叉树遍利 062 浮点数转换为字符串 063 汉诺塔问题 064 哈夫曼编码 065 图的深度优先遍利 066 图的广度优先遍利 067 求解最优交通路径 068 八皇后问题 069 骑士巡游 070 用栈设置密码 071 魔王语言翻译 072 火车车厢重排 073 队列实例 074 K阶斐波那契序列 第三部分 数值计算与趣味数学篇 075 绘制余弦曲线和直线的迭加 076 计算高次方数的尾数 077 打鱼还是晒网 078 怎样存钱以获取最大利息 079 阿姆斯特朗数 080 亲密数 081 自守数 082 具有abcd=(ab+cd)2性质的数 083 验证歌德巴赫猜想 084 素数幻方 085 百钱百鸡问题 086 爱因斯坦的数学题 087 三色球问题 088 马克思手稿中的数学题 089 配对新郎和新娘 090 约瑟夫问题 091 邮票组合 092 分糖果 093 波瓦松的分酒趣题 094 求π的近似值 095 奇数平方的有趣性质 096 角谷猜想 097 四方定理 098 卡布列克常数 099 尼科彻斯定理 100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 111 绘制正态分布曲线 112 求解非线性方程 113 实矩阵乘法运算 114 求解线性方程 115 n阶方阵求逆 116 复矩阵乘法 117 求定积分 118 求满足特异条件的数列 119 超长正整数的加法 第四部分 图形篇 120 绘制直线 121 绘制圆 122 绘制圆弧 123 绘制椭圆 124 设置背景色和前景色 125 设置线条类型 126 设置填充类型和填充颜色 127 图形文本的输出 128 金刚石图案 129 飘带图案 130 圆环图案 131 肾形图案 132 心脏形图案 133 渔网图案 134 沙丘图案 135 设置图形方式下的文本类型 136 绘制正多边形 137 正六边形螺旋图案 138 正方形螺旋拼块图案 139 图形法绘制圆 140 递归法绘制三角形图案 141 图形法绘制椭圆 142 抛物样条曲线 143 Mandelbrot分形图案 144 绘制布朗运动曲线 145 艺术清屏 146 矩形区域的颜色填充 147 VGA256色模式编程 148 绘制蓝天图案 149 屏幕检测程序 150 运动的小车动画 151 动态显示位图 152 利用图形页实现动画 153 图形时钟 154 音乐动画 第五部分 系统篇 155 读取DOS系统中的国家信息 156 修改环境变量 157 显示系统文件表 158 显示目录内容 159 读取磁盘文件 160 删除目录树 161 定义文本模式 162 设计立体窗口 163 彩色弹出菜单 164 读取CMOS信息 165 获取BIOS设备列表 166 锁住硬盘 167 备份/恢复硬盘分区表 168 设计口令程序 169 程序自我保护 第六部分 常见试题解答篇 170 水果拼盘 171 小孩吃梨 172 删除字符串中的特定字符 173 求解符号方程 174 计算标准差 175 求取符合特定要求的素数 176 统计符合特定条件的数 177 字符串倒置 178 部分排序 179 产品销售记录处理 180 特定要求的字符编码 181 求解三角方程 182 新完全平方数 183 三重回文数 184 奇数方差 185 统计选票 186 同时整除 187 字符左右排序 188 符号算式求解 189 数字移位 190 统计最高成绩 191 比较字符串长度 192 合并整数 193 矩阵逆置 194 删除指定的字符 195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七部分 游戏篇 207 商人过河游戏 208 吃数游戏 209 解救人质游戏 210 打字训练游戏 211 双人竞走游戏 212 迷宫探险游戏 213 迷你撞球游戏 214 模拟扫雷游戏 215 推箱子游戏 216 五子棋游戏 第八部分 综合实例篇 217 综合CAD系统 218 功能强大的文本编辑器 219 图书管理系统 220 进销存管理系统
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小龙向钱进

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值