为何c4droid运行不来贪吃蛇,还是我找的代码错了
c4droid吧
全部回复
仅看楼主
level 11
malaysia000 楼主
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include <windows.h>
#define N 225
struct Food
{
int x;
int y;
int yes;//1表示需要出现新食物,0表示已有食物。
}food;
struct Snake
{
struct Food body[N];
int life;//1表示蛇死啦,0表示蛇活着。
int node;//蛇的节数。
char direction;//蛇自动运动的方向。
}snake;
int score=0;
int main()
{
FILE *p;
int i,j,k,b;
char map[16][16],c;
p=fopen("E:\\file.txt","r");
if(p==NULL)
{
printf("error");
exit(1);
}
for(i=0;i<16;i++)
{
for(j=0;j<16;j++)
{
map[i][j]=fgetc(p);
}
fgetc(p);
}
snake.body[0].x=8;//蛇头。
snake.body[0].y=8;
snake.body[1].x=8;
snake.body[1].y=7;
snake.body[2].x=8;
snake.body[2].y=6;
snake.node=3;//蛇的节数。
food.yes=1;
srand(time(NULL));
snake.direction='d';//一开始蛇自动往右跑。
while(1)
{
if(kbhit())
{
c=getch();
if(snake.life==1)
break;
if(c=='w' && snake.direction!='s')
snake.direction='w';
else if(c=='a' && snake.direction!='d')
snake.direction='a';
else if(c=='s' && snake.direction!='w')
snake.direction='s';
else if(c=='d' && snake.direction!='a')
snake.direction='d';
}
if(food.yes==1)//需要随机出现新的食物。
{
food.x=1+rand()%14;
food.y=1+rand()%14;
for(i=0;i<snake.node;i++) {="" if(food.x="
{
snake.body[i].x=snake.body[i-1].x;
snake.body[i].y=snake.body[i-1].y;
}
switch(snake.direction)//蛇头方向。
{
case'a':
snake.body[0].y-=1;
break;
case'w':
snake.body[0].x-=1;
break;
case'd':
snake.body[0].y+=1;
break;
case's':
snake.body[0].x+=1;
break;
}
if(food.yes==0)//显示蛇,食物和围墙。
{
system("cls");
for(i=0;i<16;i++)
{
for(j=0;j<16;j++)
{
b = 1;
for(k=0;k<snake.node;k++) {="" if(
printf("★");
else if(map[i][j]=='1')
printf("■");
else
printf(" ");
}
}
putchar('\n');
}
Sleep(250);//休眠函数。
}
for(i=3;i<snake.node;i++) 判断蛇是否咬到自己。=""
{
printf("蛇撞墙死了!\n");
printf("共得分:%d\n",score);
snake.life=1;
break;
}
}
fclose(p);
return 0;
}
2014年10月16日 10点10分 1
level 12
报错是什么?
2014年10月16日 11点10分 2
level 11
malaysia000 楼主
2014年10月16日 11点10分 3
只能在电脑上运行的。想找在c4运行的可以去吧里的精品贴里找
2014年10月16日 11点10分
level 12
windows.h~~ 你还没搞清楚你使用的环境
   --纸上得来终觉浅,觉知此事要躬行,要躬行!
2014年10月16日 13点10分 4
有没有c4能用的[乖]
2014年10月16日 14点10分
level 11
←_←
2014年10月16日 13点10分 5
level 11
[滑稽]
2014年10月16日 14点10分 6
level 10
windows
2014年10月16日 15点10分 7
level 10
你要用windows实现读取文件吧,c4可以的
#include<stdio.h>
#include<stdlib.h>
main()
{
FILE *fp;
char ch,wjm2[50],wjm[51];
printf("请输入文本路径:");
scanf("%s",wjm);
if (!(fp=fopen(wjm,"r")))
{
printf("%s文件打开错误\n请检查!",wjm);
exit(1);
}
while (feof(fp)==0)
{
ch=fgetc(fp);
printf("%c",ch);
}
printf("\n完成!");
}
2014年10月16日 15点10分 9
level 13
又是瘟都死,安卓怎么包含瘟都死,就不怀疑下么……
2014年10月17日 00点10分 10
level 1
求完整可行代码
2014年11月26日 15点11分 11
level 13
/*c4droid代码手册
*贪食蛇
*啊o额iu鱼编写
*TTHHR收集整理
*转载请说明出处
*/
/*********************
*****字符版贪吃蛇****
-------------------------------------
****by_啊o额iu鱼****
*******ver:2.0*********/
// 加了大量注释,只注释与游戏本身内容相关的,简单的函数的使用就不说明了……
//更新内容:
//v2.0解决横纵比不同的问题,两个并列的符号走起来难看,现在用有色背景,主要看颜色,就不觉得难看了……
//v1.2原帖36楼。修复了一个大bug,关于函数嵌套的,over函数中不断嵌套start函数会导致start函数始终不能返回,占内存不能释放,迟早内存溢出……
//v1.1原帖7楼30楼。修复了咬尾巴bug,增加了挡路石……
//v1.0原版……
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define H 16
// 高度high
#define W 24
// 宽度weight
#define N 4
// 难度,步时为(1/N)s
#define UP '2'
#define DOWN '5'
#define LEFT '4'
#define RIGHT '6'
// 自定义方向键…
void move();
void start();
void draw();
void getturn();
void getrand(int &a, int &b);
void turn(char direction);
int judge();
void getfood();
void getrock();
void over();
// 好多自定义函数…
int x, y;
// 蛇头坐标…
// x横坐标即列数,y纵坐标即行数…
int l = 0;// 蛇肚子长
int n, i, j, jg;
int x1, y1;
// 食物和石头的坐标…
char *head, *tail, *tt;
// 指向头尾,tt是临时的尾巴…
char map[H][W];
// 用二维数组存全图…
char *belly[H
2014年11月26日 16点11分 12
level 13
char *belly[H * W], *food, *rock;// 肚子食物和石头…
char left, right, front, back;
// 本人用的是前后左右移动…
int main()
{
for (;;)// v1.2改…
start();
// 额,简洁明了的主函数...
}
void start()// 开始…
{
for (i = 0; i != H; ++i)
for (j = 0; j != W; ++j)
{
if ((i == 0) || (i == H - 1) || (j == 0) || (j == W - 1))
map[i][j] = '9';
else
map[i][j] = '0';
}
x = W / 2, y = H / 2, l = 0;
head = &map[y][x + 1];
belly[l] = &map[y][x];
tail = &map[y][x - 1];
*head = '1';
*belly[0] = '2';
*tail = '3';
left = UP, right = DOWN;
front = RIGHT, back = LEFT;
turn(front);
getfood();
draw();
// 前面都是初始化,现在才开始…
do
{
usleep(1000000 / N);
// 步时为(1/N)s
getturn();
// 读取拐弯方向…
move();// 移动…
jg = judge();
// 判断头移到那了…
clrscr();// 清屏…
draw();// 重绘…
}
while (jg);// v1.2改,用返回值判断游戏是否结束…
clrscr();
return;// 游戏结束就返回,这句有没有都无所谓…
}
void getturn()
{
char t;
while (kbhit())// 判断有无输入值…
{
t = getch();// 有则捕获…
if (t == left)
// 判断方向并拐弯…
{
2014年11月26日 16点11分 13
level 13
if (t == left)
// 判断方向并拐弯…
{
turn(left);
left = back;
back = right;
right = front;
front = t;
goto gett;
}
else if (t == right)
{
turn(right);
right = back;
back = left;
left = front;
front = t;
goto gett;
}
}
turn(front);
gett:;
while (kbhit())
t = getch();
// 把多输入的吃掉…
}
void getfood()// 来个吃的…
{
getrand(x1, y1);
// 食物要落在空地上…
food = &map[y1][x1];
*food = '4';
// 移指针并赋值…
getrock();
// 顺便来个石头…
// 不喜欢可以去掉…
}
void getrock()
{
getrand(x1, y1);
rock = &map[y1][x1];
// 要是正好石头就在面前只能说是运气不好了……
*rock = '8';
}
void getrand(int &a, int &b)
{
do
{
a = random() % (W - 2) + 1;
b = random() % (H - 2) + 1;
}
while (map[b][a] != '0');
}
void turn(char direction)
// 转向,想不到更好的单词了,直走也算turn…
{
switch (direction)
// 蛇头坐标先走…
{
case UP:
--y;
break;
case DOWN:
++y;
break;
case LEFT:
--x;
break;
case RIGHT:
++x;
break;
}
}
void move()
// 蛇肚子走…
{
tt = belly[l];
// 先临时的尾巴走…
for (i = l; i != 0; --i)//
2014年11月26日 16点11分 14
level 13
tt = belly[l];
// 先临时的尾巴走…
for (i = l; i != 0; --i)// 挪动…
belly[i] = belly[i - 1];
belly[0] = head;
head = &map[y][x];
// 蛇肚子先走才走蛇头…
*belly[0] = '2';
// 蛇肚子2了……
}
int judge()
{
switch (*head)
{
case '2':;
case '8':;
case '9':
over();
return 0;// v1.2改…
// 咬肚子或撞墙死…
// 咬尾巴不算,尾巴马上走了…
break;
case '4':
getfood();
// 吃了还有…
++l;
belly[l] = tt;
// 伸长,真的尾巴就不用动了…
*head = '1';
// 蛇头跟上…
break;
case '0':
*tail = '0';
case '3':
*head = '1';
tail = tt;
*tail = '3';
// 没东西就让真尾巴也跟上…
//v1.1改,解决咬尾巴bug…
break;
}
return 1;
}
void draw()
// 绘图…//v2.0改输出颜色和宽度……
{
for (i = 0; i != H; ++i)
{
for (j = 0; j != W; ++j)
switch (map[i][j])
{
case '0':
printf(" ");//v2.0改,两个空格,下面的也都是两个……
break;
case '9':
printf("\033[47;36m##\33[40;37m");
break;
case '8':
printf("\33[47;36m¤¤\33[40;37m");
break;
// 石头…
case '1':
printf("\033[41;33m@@\33[40;37m");
break;
case '2':
printf("\33[42;33mOO\3
2014年11月26日 16点11分 15
level 13
case '2':
printf("\33[42;33mOO\33[40;37m");
break;
case '3':
printf("\33[42;34moo\33[40;37m");
break;
case '4':
printf("\33[46;37m♥♥\33[40;37m");
//还是宽度问题,如果有任何不对劲的地方,就把输出符号改下试试……
break;
}
printf("\n");
}
}
void over()
// game over!!!
{
printf("\tGame over!!!\n");
printf("\t\tAgain?\n");
getch();
// 输入任意字符继续…
clrscr();
// start();
// 重新…
// v1.2改,原来的不断嵌套使用start函数不返回,会导致内存被占用越来越多,最后内存溢出…
}
2014年11月26日 16点11分 16
level 1
不知道你c咋学的,windows.h是什么?这个是消息分配流,是微软转为windows系列的系统增加的头文件,手机是啥操作系统?
2020年06月27日 18点06分 17
1