ubuntu linux 终端 pop star 打星星游戏

ubuntu 终端下的一款小游戏,是看别人的做出来之后我想在linux做的,现在分享给大家,这个游戏目前在android和iphone上很流行
首先这个游戏使用非常简单,首先有GCC 或者G++编译下面的源代码,然后直接运行就可以看见效果了,输入你要消除位置的坐标就可以了如果你输入的坐标位置不合法将给出提示。
注意事项:终端大小一定要大一点,保证整个图形能放进去,否则不会有想要的效果
          在输入坐标的时候两个坐标点之间有一个空格分开
游戏特点:这个游戏可以在任意终端下运行,不借助任何图形库,所有的看似图形的东西都是由空格来控制的
游戏特色:我还没见哪个游戏可以在终端上玩的很好的而这个游戏可以,即使你是完全的字符界面,那么玩这款游戏也是很好的!
还有一点要注意就是,有的linux可能对中文乱码,那么只要把源代码中的“沸点工作室每个字全部换成两个空格就行了!
游戏规则:只需点击两个或两个以上颜色相同的方块即可消除
玩法:直接输入你要消除相同颜色位置的坐标(任意位置的都行)
 
 
有任何问题可以联系我:QQ 2632959687
注:沸点工作室是华中农业大学计算机科学与技术系的一个IT学生组织






下面是这款游戏的源代码:(GCC)
#include<stdio.h>
#include<unistd.h>
#include<time.h>
#include<string.h>
#include<stdlib.h>
int map[11][11];
int count_now;//本次消灭个数
int total_score;//当前总分
int last_have;//最后剩余未消个数
int target_score;//本关目标分数
int level;//等级
int cal_score(int t)//根据消除的个数决定分数
{
return t*(t*5);
}
int cal_target_score(int l)
{
if(l<=5)
target_score+=2000;
else if(l<=10)
target_score+=3000;
else if(l<=15)
target_score+=3500;
else 
target_score+=4000;
return 0;
}
int cal_bonous(int t)
{
if(t>=10)
return 0;
else
return 2000-t*t*20;
}
bool check_one(int (*p)[11],int i,int j)//检查单个点是否符合消除的条件
{
bool flag=false;
if(i<0||i>=10||j<0||j>=10||map[i][j]==-1)
return false;
if(i-1>=0&&map[i-1][j]==map[i][j])
flag=true;
if(flag||(j+1<10&&map[i][j+1]==map[i][j]))
flag=true;
if(flag||(i+1<10&&map[i+1][j]==map[i][j]))
flag=true;
if(flag||(j-1>=0&&map[i][j-1]==map[i][j]))
flag=true;
return flag;
}
bool check_all(int (*p)[11])
{
int i,j;
for(i=9;i>=0;i--)
for(j=0;j<10;j++)
if(check_one(p,i,j))
return true;
return false;
}
int init()///init
{
int i,j;
srand(time(NULL)); 
for(i=0;i<10;i++)
for(j=0;j<10;j++)
map[i][j]=rand()%5;
return 0;
}
int show(int (*map)[11])//print
{
int i,j;
for(i=0;i<10;i++)
{
printf("                     %d ",9-i);
for(j=0;j<10;j++)
switch(map[i][j])
{
case -1:printf("        ");break;
case 0:printf("\033[41m      \033[0m"); putchar(' ');putchar(' ');break;
case 1:printf("\033[42m      \033[0m");putchar(' ');putchar(' ');break;
case 2:printf("\033[43m      \033[0m");putchar(' ');putchar(' ');break;
case 3:printf("\033[44m      \033[0m");putchar(' ');putchar(' ');break;
case 4:printf("\033[45m      \033[0m");putchar(' ');putchar(' ');break;
}
putchar('\n');
printf("                     %d ",9-i);
for(j=0;j<10;j++)
switch(map[i][j])
{
case -1:printf("        ");break;
case 0:printf("\033[41m  沸  \033[0m"); putchar(' ');putchar(' ');break;
case 1:printf("\033[42m  点  \033[0m");putchar(' ');putchar(' ');break;
case 2:printf("\033[43m  工  \033[0m");putchar(' ');putchar(' ');break;
case 3:printf("\033[44m  作  \033[0m");putchar(' ');putchar(' ');break;
case 4:printf("\033[45m  室  \033[0m");putchar(' ');putchar(' ');break;
}
putchar('\n');
printf("                     %d ",9-i);
for(j=0;j<10;j++)
switch(map[i][j])
{
case -1:printf("        ");break;
case 0:printf("\033[41m      \033[0m"); putchar(' ');putchar(' ');break;
case 1:printf("\033[42m      \033[0m");putchar(' ');putchar(' ');break;
case 2:printf("\033[43m      \033[0m");putchar(' ');putchar(' ');break;
case 3:printf("\033[44m      \033[0m");putchar(' ');putchar(' ');break;
case 4:printf("\033[45m      \033[0m");putchar(' ');putchar(' ');break;
}
putchar('\n');
putchar('\n');
}
printf("                   +   ");
for(j=0;j<10;j++)
{ printf("%d %d %d ",j,j,j);printf("  ");}
putchar('\n');
printf("\033[36m                                        沸  点  工  作  室  制  作                   \033[0m");
return 0;
}
int clean(int (*p)[11],int i,int j ,int real)
{
if(i<0||i>=10||j<0||j>=10)//其实没必要,但是效率要高一些
return 0;
//printf("OK:%d  %d\n",i,j);
if(i-1>=0&&map[i-1][j]==real)
{  count_now++;map[i-1][j]=-1; clean(p,i-1,j,real); }
if((j+1<10&&map[i][j+1]==real))
{count_now++; map[i][j+1]=-1; clean(p,i,j+1,real); }
if((i+1<10&&map[i+1][j]==real))
{count_now++; map[i+1][j]=-1; clean(p,i+1,j,real); }
if((j-1>=0&&map[i][j-1]==real))
{ count_now++; map[i][j-1]=-1; clean(p,i,j-1,real); }
return 0;
}
int down(int (*p)[11])//上面的下来
{
int i,j,c;
for(j=0;j<10;j++)
{
c=0;
for(i=9;i>=0;i--)
{
if(p[i][j]==-1)
c++;
else
p[i+c][j]=p[i][j];
}
for(i=0;i<c;i++)
p[i][j]=-1;
}
return 0;
}
int left(int (*p)[11])向左看齐
//在向下对齐之后向右就简单了
{
int i=9,j=0,c=0;
int x;
for(j=0;j<10;j++)
{
if(p[i][j]==-1)
c++;
else
for(x=0;x<10;x++)
p[x][j-c]=p[x][j];
}
for(j=0;j<c;j++)
for(i=0;i<10;i++)
p[i][10-j-1]=-1;
return 0;
}
int play_game(int(*p)[11])//play
{
int i,j;
show(p);
printf("\n\n\n\033[33m                                             请输入消除坐标:\033[0m");
char ch_i[20],ch_j[20];
scanf("%s%s",ch_j,ch_i);
if(strlen(ch_j)>1||strlen(ch_i)>1)
{ printf("输入不合法,不符合条件\n"); return 0;} 
else 
{
i=int(ch_i[0]-'0');
j=int(ch_j[0]-'0');
}
i=9-i;
if(check_one(p,i,j))
{  printf("输入OK\n"); clean(p,i,j,p[i][j]);down(p); left(p); } 
else 
printf("输入不合法,不符合条件\n");
return 0;
}
int main()
{
bool flag_go_on=true;//判断是否继续
target_score=1000;
level=1;
while(flag_go_on)
{
printf("begin new !\n\n\n\n");
init();
last_have=100;
while(1)
{
 count_now=0;
 play_game(map); 
 total_score+=cal_score(count_now);
 last_have-=count_now;
if(!check_all(map))
{
total_score+=cal_bonous(last_have);
if(total_score>=target_score)
{ 
printf("congrulations you win !\n");
flag_go_on=true;
level++;
cal_target_score(level);
}
else
{ 
flag_go_on=false; printf("loser ! hahahahahahahahah...................\n");
}
printf("last_have:%d ,bonus:%d,total:%d\n",last_have,cal_bonous(last_have),total_score);


break;
}
printf("clean star num:%d ,add:%d ,total:%d\n,level:%d ,target score:%d\n",count_now,cal_score(count_now),total_score,level,target_score);
}
show(map);
sleep(10);
}
return 0;
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值