| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 753 人关注过本帖
标题:求贪吃蛇源代码和详细的注释
只看楼主 加入收藏
lxjie
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-12-8
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:8 
求贪吃蛇源代码和详细的注释
vc能运行的简单贪吃蛇源代码和详细的注释
搜索更多相关主题的帖子: 贪吃蛇 源代码 
2012-12-13 23:57
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
帮顶吧,如果有人发的话我也研究下

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-14 09:11
阿鞠尼
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:首尔
等 级:蒙面侠
威 望:5
帖 子:1467
专家分:4442
注 册:2012-5-30
收藏
得分:0 
搜索一下以前的帖子

喜欢睡觉 却经常熬夜
2012-12-14 09:11
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:20 
回复 楼主 lxjie
Snake.rar (487 KB)
刚学不久,额

这是上学期写的,用到了EasyX库(百度一下就知道了)



[fly]存在即是合理[/fly]
2012-12-14 12:29
龙航四海
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:58
专家分:102
注 册:2012-10-17
收藏
得分:0 
贪吃蛇.zip (2.19 KB)

你看看
2012-12-14 13:17
lxjie
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-12-8
收藏
得分:0 
回复 4楼 azzbcc
很好,谢啦

c语言初学者
2012-12-17 00:18
lxjie
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-12-8
收藏
得分:0 
回复 5楼 龙航四海
运行不了

c语言初学者
2012-12-17 00:19
chaoge他爹
Rank: 2
等 级:论坛游民
帖 子:26
专家分:24
注 册:2012-11-9
收藏
得分:0 
呵呵,,既然拿了,,就要留名,,,看到的回一声是不?
2012-12-17 00:33
七月朵朵
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-12-9
收藏
得分:0 
#include <windows.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#define N 21
 
int apple[3];
char score[3];
char tail[3];
 
void gotoxy(int x, int y) //输出坐标, 也就是在咱们创建的窗口里找一个坐标,贪吃蛇上下左右移动和食物随机出现都需要定义坐标
{
 COORD pos;
 pos.X = x;
 pos.Y = y;
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
 
void color(int b) //颜色函数
{
 HANDLE hConsole = GetStdHandle((STD_OUTPUT_HANDLE)) ;
 SetConsoleTextAttribute(hConsole,b) ;
}
 
int Block(char head[2]) //判断出界
{
 if ((head[0] < 1) || (head[0] > N) || (head[1] < 1) || (head[1] > N))
 return 1;
 return 0;
}
 
int Eat(char snake[2]) //吃了苹果
{
 if ((snake[0] == apple[0]) && (snake[1] == apple[1]))
 {
 apple[0] = apple[1] = apple[2] = 0;
 gotoxy(N+44,10);
 color(13);
 printf("%d",score[0]*10);
 color(11);
 return 1;
 }
 return 0;
}
 
void Draw(char **snake, int len) //蛇移动
{
 if (apple[2]) {
 gotoxy(apple[1] * 2, apple[0]);
 color(12);
 printf("●");
 color(11);
 }
 gotoxy(tail[1] * 2, tail[0]);
 if (tail[2])
 { color(14);
 printf("★");
 color(11);
 }
 else
 printf("■");
 gotoxy(snake[0][1] * 2, snake[0][0]);
 color(14);
 printf("★");
 color(11);
 putchar('\n');
}
 
char** Move(char **snake, char dirx, int *len) //控制方向
{
 int i, full = Eat(snake[0]);
 memcpy(tail, snake[(*len)-1], 2);
 for (i = (*len) - 1; i > 0; --i)
 memcpy(snake[i], snake[i-1], 2);
 switch (dirx)
 {
 case 'w': case 'W': --snake[0][0]; break;
 case 's': case 'S': ++snake[0][0]; break;
 case 'a': case 'A': --snake[0][1]; break;
 case 'd': case 'D': ++snake[0][1]; break;
 default: ;
 }
 if (full)
 {
 snake = (char **)realloc(snake, sizeof(char *) * ((*len) + 1));
 snake[(*len)] = (char *)malloc(sizeof(char) * 2);
 memcpy(snake[(*len)], tail, 2);
 ++(*len);
 ++score[0];
 if(score[3] < 16)
 ++score[3];
 tail[2] = 1;
 }
 else
 tail[2] = 0;
 return snake;
}
 
void init(char plate[N+2][N+2], char ***snake_x, int *len) //初始化
{
 int i, j;
 char **snake = NULL;
 
 *len = 3;
 score[0] = score[3] =3;
 snake = (char **)realloc(snake, sizeof(char *) * (*len));
 for (i = 0; i < *len; ++i)
 snake[i] = (char *)malloc(sizeof(char) * 2);
 
 for (i = 0; i < 3; ++i)
 {
 snake[i][0] = N/2 + 1;
 snake[i][1] = N/2 + 1 + i;
 }
 
 for (i = 1; i <= N; ++i)
 for (j = 1; j <= N; ++j)
 plate[i][j] = 1;
 
 apple[0] = rand()%N + 1; apple[1] = rand()%N + 1;
 apple[2] = 1;
 
 for (i = 0; i < N + 2; ++i)
 {
 gotoxy(0, i);
 for (j = 0; j < N + 2; ++j)
 {
 switch (plate[i][j])
 {
 case 0:
 color(12);printf("□");color(11); continue;
 case 1: printf("■"); continue;
 default: ;
 }
 }
 putchar('\n');
 }
 for (i = 0; i < (*len); ++i)
 {
 gotoxy(snake[i][1] * 2, snake[i][0]);
 printf("★");
 }
 putchar('\n');
 *snake_x = snake;
}
 
void Manual()
{
 gotoxy(N+30,2);
 color(10);
 printf("按 W S A D 移动方向");
 gotoxy(N+30,4);
 printf("按 space 键暂停");
 gotoxy(N+30,8);
 color(11);
 printf("历史最高分为: ");
 color(12);
 gotoxy(N+44,8);
 printf("%d",score[1]*10);
 color(11);
 gotoxy(N+30,10);
 printf("你现在得分为: ");
 gotoxy(N+30,16);
 printf("电信三班-段琛璐");
}
 
int File_in() //取记录的分数
{
 FILE *fp;
 if((fp = fopen("C:\\tcs.txt","a+")) == NULL)
 {
 gotoxy(N+18, N+2);
 printf("文件不能打开\n");
 exit(0);
 }
 if((score[1] = fgetc(fp)) != EOF);
 else
 score[1] = 0;
 return 0;
}
 
int File_out() //存数据
{
 
 FILE *fp;
 if(score[1] > score[0])
 {gotoxy(10,10);
 color(12);
 puts("闯关失败 加油耶");
 gotoxy(0,N+2);
 return 0;
 }
 if((fp = fopen("C:\\tcs.txt","w+")) == NULL)
 {
 printf("文件不能打开\n");
 exit(0);
 }
 if(fputc(--score[0],fp)==EOF)
 printf("输出失败\n");
 gotoxy(10,10);
 color(12);
 puts("恭喜您打破记录");
 gotoxy(0,N+2);
 return 0;
}
 
 
void Free(char **snake, int len) //释放空间
{
 int i;
 for (i = 0; i < len; ++i)
 free(snake[i]);
 free(snake);
}
 
int main(void)
{
 int len;
 char ch = 'g';
 char a[N+2][N+2] = {{0}};
 char **snake;
 srand((unsigned)time(NULL));
 system("title 电信三班-段琛璐");
 color(11);
 File_in();
 init(a, &snake, &len);
 Manual();
 while (ch != 0x1B) // 按 ESC 结束
 {
 Draw(snake, len);
 if (!apple[2]) {
 apple[0] = rand()%N + 1;
 apple[1] = rand()%N + 1;
 apple[2] = 1;
 }
 Sleep(200-score[3]*10);
 setbuf(stdin, NULL);
 if (kbhit())
 {
 gotoxy(0, N+2);
 ch = getche();
 }
 snake = Move(snake, ch, &len);
 if (Block(snake[0])==1)
 {
 gotoxy(N+2, N+2);
 puts("你输了");
 File_out();
 Free(snake, len);
 getche();
 exit(0);
 }
 }
 Free(snake, len);
 exit(0);
}
2016-12-09 20:42
快速回复:求贪吃蛇源代码和详细的注释
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033605 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved