问题描述
解决方案
是跳转的意思,把gett;标签下面的代码收拢成一个函数 gotoMethod(),然后在goto的地方写上
gotoMethod();
break;
即可
解决方案二:
goto gett;在你的代码中相当于break不相当于while
解决方案四:
goto和while没有必然关系吧,goto语句一般用于跳出很深的循环比较好,否则不建议使用。像你的代码里执行到goto语句时不执行goto后面的语句而跳转到gett标签处
解决方案五:
goto不是跳转的意思?
解决方案六:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int x,y,i,j;
char *head,*tail,*belly, map[12][30];
char left,right,front,back;
void start()
{
for (i=0; i!=12; ++i)
{
for (j =0; j!=30; ++j)
{
if ((i == 0)||(i == 11) || (j == 0) || (j == 29))
map[i][j] = '9';
else
map[i][j] ='0';
}
}
x=15;
y = 6;
head = &map[y][x];
belly=&map[y][x-1];
tail=&map[y][x-2];
*head ='1';
*belly='3';
*tail='5';
front='6';
back='4';
left='2';
right='8';
}
void draw()
{
for (i=0; i!=12;++i)
{
for (j=0; j!=30; ++j)
{
switch(map[i][j])
{
case '0':printf(" ");break;
case '9':printf("#");break;
case '1':printf("O");break;
case '2':printf(" ");break;
case '3':printf("=");break;
case '5':printf("~");break;
}
}
printf("n");
}
}
void turn(char direction)
{
switch (direction)
{
case '2':--y;break;
case '8':++y;break;
case '4':--x;break;
case '6':++x;break;
}
}
void getturn()
{
char t;
while (kbhit())
{
t=getch();
if (t==left)
{
turn(t);
left=back;
back=right;
right=front;
front=t;//front=left;不能这样写
return;
}
else if (t==right)
{
turn(t);
right=back;
back=left;
left=front;
front=t;
return;
}
}
turn(front);
return;
}
void move()
{
*tail='2';
tail=belly;
*tail='5';
belly=head;
*belly='3';
/* *head ='2';//该位置原来打印'o',现改为打印成' '*/
head = &map[y][x];//改变指针指向
*head='1';
}
int main()
{
start();
draw();
while (1)
{
usleep(10000000/4);
getturn();
move();
clrscr();
draw();
}
return 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 * W], *food, *rock;// 肚子食物和石头…
char left, right, front, back;
// 本人用的是前后左右移动…
int main()
{
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(10000000 / 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)
// 判断方向并拐弯…
{
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)// 挪动…
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()
{
for (i = 0; i != H; ++i)
{
for (j = 0; j != W; ++j)
switch (map[i][j])
{
case '0':
printf(" ");
break;
case '9':
printf("##");
break;
case '8':
printf("¤¤");
break;
// 石头…
case '1':
printf("@@");
break;
case '2':
printf("OO");
break;
case '3':
printf("oo");
break;
case '4':
printf("??");
break;
}
printf("n");
}
}
void over()
// game over!!!
{
printf("tGame over!!!n");
printf("ttAgain?n");
getch();
// 输入任意字符继续…
clrscr();
}
时间: 2025-01-21 05:06:21