C语言彩色版贪吃蛇——图形界面Easyx的简单使用

大一上大概12月份学完了C语言,基本语法与知识已经基本具备,可以用C语言写出基本的贪吃蛇游戏,但是基础C语言的可视化与交互功能实在是太弱了,为了写出有色彩的游戏,需要在网上安装一个Easyx的插件,具体Easyx如何使用参见https://zhuanlan.zhihu.com/p/24826034点击打开链接

然后编程软件我用的是VS 2017(因为Dev C++不支持Easyx) VS安装入口:点击打开链接

程序实现了用户登陆与注册,用户数据保存到文件,高分榜等较为简单的功能,整个代码不算注释大概三百五十行。

游戏效果大概是这样:

C语言彩色版贪吃蛇——图形界面Easyx的简单使用_第1张图片
C语言彩色版贪吃蛇——图形界面Easyx的简单使用_第2张图片
介绍一下游戏思路:先想清楚完成贪食蛇这个游戏需要哪些元素,游戏需要满足哪些功能,再敲代码把它们逐渐实现。
首先我们需要基础元素:地图(墙),然后是食物,一条蛇。 然后是功能:1.移动蛇   2.蛇的长大(吃果子)  3.蛇的死活(撞墙或者自食) 具体代码见下(有详细注释)。
然后是图像的处理:1.注意Eaxyx的点是像素点,与控制台的点不一样,用的时候要记得乘个系数转化
2.你可以选择用Easyx的函数画地图(就像我的代码一样,很随便而简陋),也可以选择去网上找图然后贴上去(可以做的很精美,想在同学面前秀一秀的注意了)
3.用户登陆与注册的部分界面用Easyx的InputBox,然后用文件读入读出的方式,把用户数据存入单独的文件中,更方便的办法是弄一个二进制文件,把用户账号和密码弄成结构存进去。
4.高分榜的实现:每次用户结束游戏后,把榜上分数从文件中读下来然后与用户本次分数比较,排序然后再重新写入文件中。


*****************************************************我是分割线************************************************************

****************************************************************************************************************************


咳咳,在后台收到了一些同学的评论,现在作为一条在大学已经摸爬滚打快一年的资深咸鱼决定在这里集中更新一下,什么觉得time flies,什么回顾以前的代码觉得很菜的口水话我就不说了,进入正题:

1.有同学说在VS上运行我的代码出现了 debug assertion failed的错误;这个错误一般是因为访问了不该访问的文件或内存地址。首先看代码知道我创建了两个文本文件,scores.txt与Users1.txt分别用来储存用户的得分与用户的账号和密码,而这两个文件是既要读出,又要写入的,而且我在代码中是调用了两个文件的内容的,所以:你必须要事先创建scores.txt与Users.txt两个文本文件,不然代码中调用了文件指针fp,而它却指向了空的内容,就会出现debug assertion failed(指针越界)的错误。

emmmm,具体如何添加文本文件如下图所示:在实用工具的文本文件中把文件名修改为scores.txt与Users.txt,(你也可以改成别的,但代码中调用的文件名也要相应改动)

C语言彩色版贪吃蛇——图形界面Easyx的简单使用_第3张图片

整个项目的布局应该是这样的:如下图所示

C语言彩色版贪吃蛇——图形界面Easyx的简单使用_第4张图片

当我们注册了账号名为123,密码名为123的用户时,并且用它玩出了3分的高分时,再打开下图的这两个文本文件,就会发现它已经出现了改动(原本都是空的)。如下图所示:

C语言彩色版贪吃蛇——图形界面Easyx的简单使用_第5张图片

C语言彩色版贪吃蛇——图形界面Easyx的简单使用_第6张图片

这次更新就到这里,谢谢各位小老板的观看!

不定期更新,欢迎留言讨论,哈哈。

//代码如下:
#include       // 引用图形库头文件
#include 
#include 
#include 
#include 
#include 
#include

#define frame_height 30 //define map size
#define frame_width 30
#define UP 'w' //define operate key
#define DOWN 's'
#define LEFT 'a'
#define RIGHT 'd'
#define SIZE 16
#define N 4
FILE *fp;
int i, j, k, m, n, s[N];
char s1[5], s2[5];
char ch = UP; //initial direction
int grow = 0; //flag: if snake grow
struct Food {
 int x;
 int y;
}food;
struct Snake {
 int x[50];
 int y[50];
 int len;
 int speed;
}snake; //snake[0] is head
typedef struct The_users //用于储存用户账号密码
{
 char id[11];//ID
 char pwd[20];//password
}users;
users a, b;//成员变量,用来登陆与注册
void init_map(void);
void update_food(void);
void move_snake(void);
int is_alive(void);
void get_speed(void);
void gotoxy(int x, int y);
void redraw_map(void);
void menu();
void registers();
void Login();
//void Create_File();
void score();
int compInc(const void *a, const void *b);
int compDec(const void *a, const void *b);
int main()
{
 initgraph(640, 480);//创建绘图窗口
 menu();
 score();
 return 0;
}
void redraw_map(void)
{
 //initial bar
 for (j = 0; j0; k--)
 {
  snake.x[k] = snake.x[k - 1];
  snake.y[k] = snake.y[k - 1];
 }
 switch (ch)
 {
 case UP:  snake.x[0]--; break;
 case DOWN: snake.x[0]++; break;
 case LEFT:  snake.y[0]--; break;
 case RIGHT:  snake.y[0]++; break;
 default:  break;
 }
 moveto(snake.y[0] * SIZE, snake.x[0] * SIZE);
 setfillcolor(GREEN);
 fillcircle(snake.y[0] * SIZE + SIZE / 2, snake.x[0] * SIZE + SIZE / 2, SIZE / 2);
 grow = 0;
}
//is alive
int is_alive(void)
{
 if (snake.x[0] == 0 || snake.x[0] == frame_height - 1 || snake.y[0] == frame_width - 1 || snake.y[0] == 0)
  return 0;
 for (k = 1; k



你可能感兴趣的:(游戏开发)