下落的小鸟
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#include<Windows.h>
int Grade = 1, Score = 0, Max_blank = 9, Distance = 18
struct Birds{int xint y} //定义一种Birds数据类型(含3个成员)
Birds *Bird = (Birds*)malloc(sizeof(Birds)) //定义Birds类型 指针变量Bird并赋初值
struct Bg{int x, yint l_blankBg *priBg *next} //定义一种Bg数据类型(含5个成员)
Bg *Bg1 = (Bg*)malloc(sizeof(Bg)) //定义Bg类型 指针变量Bg1并赋初值
void Position(int x, int y) //光标定位函数(用于指定位置输出)
{COORD pos = { x - 1, y - 1 }
HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE)
SetConsoleCursorPosition(Out, pos)
}
void Csh( ) //初始化界面
{
printf("══════════════════════════════════════\n")
printf(" ■■ ■■ C语言版 Flappy Bird \n")
printf(" ■■ ■■\n")
printf(" ■■ ■■\n")
printf(" ■■ ■■ 瞎搞人:yyposs原创\n")
printf(" ■■ ■■ 瞎搞日期:2014.2\n")
printf(" ■■ ■■\n")
printf(" ■■ ■■ 改编:鸣蝉百2021.7\n")
printf(" ■■ ■■ *** 作:按向上方向键让小鸟起飞\n")
printf(" ■■\n")
printf(" ■■\n")
printf(" ■■ ■■\n")
printf(" ■■ ■■\n")
printf(" ■■ ■■\n")
printf(" ■■ ■■\n")
printf(" ■■ ■■ DEVc++运行通过\n")
printf("══════════════════════════════════════\n")
printf(" 按键继续…")
getch( )
system("cls")
}
void PrFK( ) //输出方框(游戏范围区)
{int i
Position(1, 1)printf("╔") Position(79, 1)printf("╗")
Position(1, 24)printf("╚") Position(79, 24)printf("╝")
for (i = 3i <= 78i += 2){Position(i, 1)printf("═")Position(i, 24)printf("═")}
for(i=2i<=23i++)
{ Position(1,i)printf("║")if(i<11)printf("0%d",i-1)else printf("%d",i-1)
Position(79,i)printf("║")
}
Position(4, 25)printf("小鸟即将出现,请准备按键起飞… ")
getch( )
Position(4, 25)printf(" ")
}
void CreatBg( ) //创建障碍物坐标(便于打印输出)
{Bg *Bg2 = (Bg*)malloc(sizeof(Bg))
Bg1->x = 90Bg1->y = 8 //确定障碍物的一对基本坐标(此时值是在游戏框之外)
Bg2->x = Bg1->x + DistanceBg2->y = 9 //下一障碍物的基本坐标x、y
Bg1->l_blank = Max_blank - Grade //障碍物上下两部分之间的空白距离l_blank
Bg2->l_blank = Max_blank - Grade
Bg1->next = Bg2Bg1->pri = Bg2
Bg2->next = Bg1Bg2->pri = Bg1
}
void InsertBg(Bg *p) //随机改变障碍物的y坐标,让空白通道有上下变化
{int temp
Bg *Bgs = (Bg*)malloc(sizeof(Bg))
Bgs->x = p->pri->x + Distance
Bgs->l_blank = Max_blank - Grade
srand((int)time(0)) //启动随机数发生器
temp = rand( ) //产生一个随机数并赋值给temp
if (temp % 2 == 0)
{if ((temp % 4 + p->pri->y + Max_blank - Grade)<21)
Bgs->y = p->pri->y + temp % 4
else Bgs->y = p->pri->y
}
else
{if ((p->pri->y - temp % 4)>2)Bgs->y = p->pri->y - temp % 4
else Bgs->y = p->pri->y
}
Bgs->pri = p->priBgs->next = p
p->pri->next = Bgsp->pri = Bgs
}
void CreatBird( ) //建立小鸟的坐标(初始打印输出小鸟的位置)
{Bird->x = 41Bird->y = 10}
int CheckYN(Bg *q) //判断游戏结束与否(值为0是要结束,为1没有要结束)
{Bg *p = qint i = 0
while (++i <= 5)
{if (Bird->y>23)return 0
if (Bird->x == p->x&&Bird->y <= p->y)return 0
if ((Bird->x == p->x || Bird->x == p->x + 1 || Bird->x == p->x + 2) &&Bird->y == p->y)return 0
if (Bird->x == p->x&&Bird->y>p->y + p->l_blank)return 0
if ((Bird->x == p->x || Bird->x == p->x + 1 || Bird->x == p->x + 2) &&Bird->y == p->y + p->l_blank)
return 0
p = p->next
}
return 1
}
void Check_Bg(Bg *q) //核查开头的障碍物坐标是否在游戏区内
{Bg *p = qint i = 0, temp
while (++i <= 5)
{if (p->x>-4)p = p->next
else
{srand((int)time(0)) temp = rand()
if (temp % 2 == 0)
{if ((temp % 4 + p->y + Max_blank - Grade)<21)p->y = p->y + temp % 4
else p->y = p->yp->x = p->pri->x + Distance
p->l_blank = Max_blank - Grade
}
else
{if ((p->y - temp % 4)>2)p->y = p->y - temp % 4
else p->y = p->yp->x = p->pri->x + Distance
p->l_blank = Max_blank - Grade
}
}
}
}
void Prt_Bg(Bg *q) //打印输出障碍物(依据其x、y坐标进行相应输出)
{Bg *p = qint i = 0, k, j
while (++i <= 5)
{if (p->x>0 &&p->x <= 78)
{for (k = 2k<p->yk++){Position(p->x + 1, k)printf("■")printf("■")printf(" ")}
Position(p->x, p->y)
printf("■")printf("■")printf("■")printf(" ")
Position(p->x, p->y + p->l_blank)
printf("■")printf("■")printf("■")printf(" ")
k = k + p->l_blank + 1
for (kk <= 23k++){Position(p->x + 1, k)printf("■")printf("■")printf(" ")}
}
p = p->next
if (p->x == 0)
{for (j = 2j<p->yj++){Position(p->x + 1, j)printf(" ")printf(" ")}
Position(p->x + 1, p->y)
printf(" ")printf(" ")printf(" ")
Position(p->x + 1, p->y + Max_blank - Grade)
printf(" ")printf(" ")printf(" ")
j = j + Max_blank - Grade + 1
for (jj <= 22j++){Position(p->x + 1, j)printf(" ")printf(" ")}
}
}
}
void PrtBird( ) //打印输出小鸟
{Position(Bird->x, Bird->y - 1)printf(" ")
Position(Bird->x, Bird->y)printf("Ю")
Position(38, 2)printf("Score:%d", Score)
}
void Loop_Bg(Bg *q) //障碍物x坐标左移,并记录成绩
{Bg *p = qint i = 0
while (++i <= 5)
{p->x = p->x - 1p = p->next
if (Bird->x == p->x)
{Score += 1
if (Score % 4 == 0 &&Grade<4)Grade++
}
}
}
int main( )
{int i = 0int t
while (1)
{
Csh( )PrFK( )CreatBg( )
InsertBg(Bg1)InsertBg(Bg1)InsertBg(Bg1)
CreatBird( )
while (1)
{if (!CheckYN(Bg1))break
Check_Bg(Bg1)Prt_Bg(Bg1)
PrtBird( )Loop_Bg(Bg1)
Bird->y = Bird->y + 1
if (GetAsyncKeyState(VK_UP)) //按下了向上方向键
{Position(Bird->x, Bird->y - 1)printf(" ")
Bird->y = Bird->y - 4
}
Sleep(200) //程序延时200毫秒(数值大小决定游戏速度快慢)
i = 0
}
Position(6, 25)
printf("游戏结束! 请输入:0.退出 1.重玩")
scanf("%d",&t)
if (t==0)break
system("cls")Score = 0
}
return 0
}
public interface IFly{
void Fly()
}
public class Plane : IFly
{
public void Fly()
{
//code hear
}
}
public class Bird : IFly
{
public void Fly()
{
//code hear
}
}
这称为列表初始化,即以N的值来初始化fly。
fly可以是原始类型的变量,如:
#define N 99
int fly{N}
也可以是复合类型的变量,如:
#define N 99
struct bird
{
int high
}fly{N}
不过,这应该是c++的新语法特性,c语言好像没有这种特性。
下面是一个使用列表初始化的综合的例子:
#include<iostream>
#include<cstdio>
using namespace std
enum color
{
red,
green,
blue
}
struct stu
{
int id
char sex
}
class cls
{
public:
cls(string s,int i):s(s),i(i)
{}
string s
int i
}
void f1()
{
char c{'G'}
int i{100}
float f{1.11}
double d{2.222222}
char* str{(char*)"ok"}
enum color cl{green}
struct stu stu1{1234,'m'}
cls o1{"aaa",1}
printf("%c %d %f %lf %s\n",
c,i,f,d,str)
printf("%d {%d,%c}\n",
cl,stu1.id,stu1.sex)
cout<<o1.s<<" "<<o1.i
cout<<endl
}
void f2()
{
char c={'G'}
int i={100}
float f={1.11}
double d={2.222222}
char* str={(char*)"ok"}
enum color cl={green}
struct stu stu1={1234,'m'}
cls o1={"aaa",1}
printf("%c %d %f %lf %s\n",
c,i,f,d,str)
printf("%d {%d,%c}\n",
cl,stu1.id,stu1.sex)
cout<<o1.s<<" "<<o1.i
cout<<endl
}
int main()
{
f1()
cout<<endl
f2()
return 0
}
输出结果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)