level 13
TTHHR
楼主
//字体要调最小……
/*********************
***Flappy Bird******
命令行版
-------------------------------------
****by:TTHHR****
*******ver:1.0*********/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define H 30
// 高度high
#define W 90
// 宽度weight
#define K H/5
#define UP '2'
#define DOWN '5'
#define DEF 'x'
#define T 300
#define A 1
#define V 1 //上升和下降的步长
// 自定义动作键…
void getway();//获取用户输入
void move(char yi);//移动数组
void draw();//将数组画出
void judge();//判断
void getwall();//随机出现带口的柱子
void over();
int x, y;
// x横坐标即列数,y纵坐标即行数…
int i, j, time =20;
char yi;
// 储存动作
char *head, *tail;
// 指向头尾
char map[H][W];
// 用二维数组存全图…
int main()
{
for (i = 0; i != H; ++i)
for (j = 0; j != W; ++j)
{
if ((i == 0) || (i == H - 1))
map[i][j] = '3';//边界
else
map[i][j] = '0';//空白部分
}// 初始化数组
x = W / 5;//
y = H / 2;//鸟的坐标
head = &map[y][x + 1];
tail = &map[y][x];
*head = '1';
*tail = '1';//头尾的代表字符
yi = DEF;//初始化动作
getchar();//程序暂停
while (1)
{
if (time % 20== 0)
getwall();//每隔20步,出现一个柱
getway();
move(yi);
judge();
draw();
usleep(100);
time++;
yi == DEF;//成为默认动作
usleep(T*1000);
// 步时
clrscr();
//printf("\n");
//clrscr();
}
return 0;
}
void getway()
{
char t;
while (kbhit())// 判断有无输入值…
{
t = getch();// 有则捕获…
if ((t != UP) && (t != DOWN))
setbuf(stdin, NULL);//清空缓冲区
else
yi = t;
}
}
void getwall()
{
int b;
//while ((b + 2 >= H) || (b - 2 <= 0))
b = random() %(H-2-2*K)+1+K;
for (j = 0; j < b - K; ++j)
map[j][W -1] = '3';
for (j = b + K; j < H-1; ++j)
map[j][W -1] = '3';
}
void move(char yi)
{
static int mov=0;//
if (yi == DEF)
mov =A ;//没实现……
else if (yi == UP)
mov = -V;//
else if (yi == DOWN)
mov = 1;
// 对动作的判断
*head = '0';
*tail = '0';//将原来的头尾变成空白
y = y + mov;
head = &map[y][x + 1];
tail = &map[y][x];//指向新的坐标
for (i = 1; i != H-1; ++i)
{
for (j = 0; j != W-1; ++j)
{
if ((i == y) && ((j <= x + 1) && (j >= x)))
;//数组左移,跳过鸟的坐标
else
map[i][j] = map[i][j + 1];
}
map[i][j]='0';
}
}
void judge()
{
switch (*head)
{
case '3':
over();
break;
case '0':
*head = '1';
*tail = '1';
// 如果是空白,就把值换成1
break;
}
}
void draw()
// 绘图…
{
for (i = 0; i != H; ++i)
{
for (j = 0; j != W; ++j)
switch (map[i][j])
{
case '0':
printf(" ");
break;
case '3':
printf("#");
break;
case '1':
printf("\033[41;33m@\33[40;37m");
break;
}
printf("\n");
}
}
void over()
// game over!!!
{
printf("\tGame over!!!\n");
exit(0);
}
2014年02月27日 03点02分
1
/*********************
***Flappy Bird******
命令行版
-------------------------------------
****by:TTHHR****
*******ver:1.0*********/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define H 30
// 高度high
#define W 90
// 宽度weight
#define K H/5
#define UP '2'
#define DOWN '5'
#define DEF 'x'
#define T 300
#define A 1
#define V 1 //上升和下降的步长
// 自定义动作键…
void getway();//获取用户输入
void move(char yi);//移动数组
void draw();//将数组画出
void judge();//判断
void getwall();//随机出现带口的柱子
void over();
int x, y;
// x横坐标即列数,y纵坐标即行数…
int i, j, time =20;
char yi;
// 储存动作
char *head, *tail;
// 指向头尾
char map[H][W];
// 用二维数组存全图…
int main()
{
for (i = 0; i != H; ++i)
for (j = 0; j != W; ++j)
{
if ((i == 0) || (i == H - 1))
map[i][j] = '3';//边界
else
map[i][j] = '0';//空白部分
}// 初始化数组
x = W / 5;//
y = H / 2;//鸟的坐标
head = &map[y][x + 1];
tail = &map[y][x];
*head = '1';
*tail = '1';//头尾的代表字符
yi = DEF;//初始化动作
getchar();//程序暂停
while (1)
{
if (time % 20== 0)
getwall();//每隔20步,出现一个柱
getway();
move(yi);
judge();
draw();
usleep(100);
time++;
yi == DEF;//成为默认动作
usleep(T*1000);
// 步时
clrscr();
//printf("\n");
//clrscr();
}
return 0;
}
void getway()
{
char t;
while (kbhit())// 判断有无输入值…
{
t = getch();// 有则捕获…
if ((t != UP) && (t != DOWN))
setbuf(stdin, NULL);//清空缓冲区
else
yi = t;
}
}
void getwall()
{
int b;
//while ((b + 2 >= H) || (b - 2 <= 0))
b = random() %(H-2-2*K)+1+K;
for (j = 0; j < b - K; ++j)
map[j][W -1] = '3';
for (j = b + K; j < H-1; ++j)
map[j][W -1] = '3';
}
void move(char yi)
{
static int mov=0;//
if (yi == DEF)
mov =A ;//没实现……
else if (yi == UP)
mov = -V;//
else if (yi == DOWN)
mov = 1;
// 对动作的判断
*head = '0';
*tail = '0';//将原来的头尾变成空白
y = y + mov;
head = &map[y][x + 1];
tail = &map[y][x];//指向新的坐标
for (i = 1; i != H-1; ++i)
{
for (j = 0; j != W-1; ++j)
{
if ((i == y) && ((j <= x + 1) && (j >= x)))
;//数组左移,跳过鸟的坐标
else
map[i][j] = map[i][j + 1];
}
map[i][j]='0';
}
}
void judge()
{
switch (*head)
{
case '3':
over();
break;
case '0':
*head = '1';
*tail = '1';
// 如果是空白,就把值换成1
break;
}
}
void draw()
// 绘图…
{
for (i = 0; i != H; ++i)
{
for (j = 0; j != W; ++j)
switch (map[i][j])
{
case '0':
printf(" ");
break;
case '3':
printf("#");
break;
case '1':
printf("\033[41;33m@\33[40;37m");
break;
}
printf("\n");
}
}
void over()
// game over!!!
{
printf("\tGame over!!!\n");
exit(0);
}
