C 数组游戏之字母爬方格
2016-06-02
导读
基于目前已经学习的C语言的知识, 写了一个游戏(游戏规则参考 《C语言程序设计现代方法 第二版的第八章的编程题9》)
规则
编写程序, 生成一种贯穿10 x 10
字符数组(初始时权威字符*
), 程序必须随机地从一个元素“走”到顶一个元素, 每次都向上,向下,向左或向右移动一个元素位置。已访问过的元素按访问顺序用字符A
到Z
进行标记,输出的例子如下:
A B C Z * * * * * *
* * D Y * * * * * *
G F E X W V U T * *
H I J K L * * S * *
* * * * M N O R * *
* * * * * * P Q * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
注意, 如果移动到某个位置后 , 上下左右四个位置都已经移动过了, 即四周都被堵住了, 游戏就得提前结束了.
思路
- 游戏起点是位于
x=0,y=0
的 - 移动方向是随机的4个方向
- 每次移动前要判断是否还有位置可以移动,即四个方向是否还有未走过的元素位置
- 移动好位置后要继续下一个字母的移动
- 打印输出
程序
#include <stdio.h>
#include <stdlib.h>
#define LEN 10
#define DIR_NUM 4 /*0=>up,1=>right,2=>down,3=>left*/
#define True 1
#define False 0
typedef int bool;
int main(void)
{
/*
* n 表示10 x 10的方格
* s 表示每次移动的字母字符
* r 表示每次随机的移动的方向,0=>up,1=>right,2=>down,3=>left
* x,y 分表表示n 数组即方格 x,y 的 索引位置
*/
int n[LEN][LEN] = {0}, s, r, x=0,y=0;
/*用于判断上下左右的位置是否均无路可走*/
bool bool_p[4] = {True, True, True, True};
n[0][0] = 'A';
srand((unsigned) time(NULL));
s = 'B';
while(s <= 'Z'){
/*
* 判断还是否有路可走
*/
if (y-1 < 0 || n[x][y-1] != 0){
bool_p[0] = False;
}
//printf("[%d][%d]=%d\n",x+1, y,n[x+1][y]);
if(x+1 > 9 || n[x+1][y] != 0){
bool_p[1] = False;
}
if(y+1 > 9 || n[x][y+1] != 0){
bool_p[2] = False;
}
if(x-1 < 0 || n[x-1][y] != 0){
bool_p[3] = False;
}
if(!bool_p[0] && !bool_p[1] && !bool_p[2] && !bool_p[3]){
break;
}
bool_p[0] = True;
bool_p[1] = True;
bool_p[2] = True;
bool_p[3] = True;
r = rand() % DIR_NUM;
switch(r){
case(0):
/*如果移动的方向过界或者已经移动过了, 重新获取方向并移动位置*/
/*下同*/
if(y-1 >= 0 && n[x][y-1] == 0){
n[x][--y] = s;
s++;
}
break;
case(1):
if(x+1 <= 9 && n[x+1][y] == 0){
n[++x][y] = s;
s++;
}
break;
case(2):
if(y+1 <= 9 && n[x][y+1] == 0){
n[x][++y] = s;
s++;
}
break;
case(3):
if(x-1 >=0 && n[x-1][y] == 0){
n[--x][y] = s;
s++;
}
break;
}
}
for(x=0; x<LEN; x++){
for(y=0;y<LEN;y++){
if(n[x][y] != 0){
printf("%3c",n[x][y]);
}else{
printf("%3c",'*');
}
}
printf("\n");
}
}
效果
A * * * * * * * * *
B * * * * * * Y X *
C D E F G * * Z W V
* * J I H * * Q R U
* * K L M N O P S T
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
补充
这里是刚写的代码, 还未完整的优化, 比如变量初始话。
程序开始的时候用0
表示默认的*
的位置, 最后输出的时候转换一下即可
如果文章有问题,欢迎指正