IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言大作业——消灭星星 -> 正文阅读

[C++知识库]C语言大作业——消灭星星

最近要提交C语言大作业了,然后经过一天的构思和大概两个小时的敲代码时间,最终写出了这篇《消灭星星》(弱化版)。

为什么叫弱化版?

因为这个版本的《消灭星星》即使一颗星星也能消除,不用满足至少三个星星的限制。

使用了什么算法?

严格来说,这段代码只使用了dfs和一些基础语言。

上代码!

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>

char s[100];
int flag[20][20];
int flag1[20][20];
char k[20][20];
int res;
int g[10];
int face[4][2]={{0,1},{0,-1},{1,0},{-1,0}};

int maxx(int x,int y)
{
   if (x>y)
      return x;
   else
      return y;
}

int kong(int x,int y)//判断该点是否为空 
{
   if (k[x][y]=='s'||k[x][y]=='t'||k[x][y]=='x'||k[x][y]=='d'||k[x][y]=='y')
      return 1;
   return 0;
}

void ge(int x,int y,int xx,int yy)//找连通的相同的颜色 
{
   if (k[x][y]==k[xx][yy]&&flag1[xx][yy]==0)
   {
      res++;
      flag1[xx][yy]=1;
   }
   for (int i=0;i<=3;i++)
   {
      int xu=xx+face[i][0];
      int yu=yy+face[i][1];
      if (xu>=1&&xu<=10&&yu>=1&&yu<=10&&flag1[xu][yu]==0&&k[x][y]==k[xu][yu])
         ge(x,y,xu,yu);
   }
}
void gengxin()//更新图 
{
   for (int a=1;a<=10;a++)
      for (int b=1;b<=10;b++)
      {
	     if (flag1[b][a])
	     {
	     	k[b][a]='0';
		    for (int c=b-1;c>=1;c--)
		       {
		          k[c+1][a]=k[c][a];
		          k[c][a]='0';
			   }
		 }
	  }
   for (int a=1;a<=10;a++)
      for (int b=1;b<=10;b++)
      {
	     if (kong(a,b))
	        flag[a][b]=0;
	     else
	        flag[a][b]=1;
	  }
}
void tu(int x,int y,int p)//随机数后建图 
{
   if (p==1)
      k[x][y]='s';
   if (p==2)
      k[x][y]='t';
   if (p==3)
      k[x][y]='x';
   if (p==4)
      k[x][y]='d';
   if (p==5)
      k[x][y]='y';
}
void dang()//输出当前图 
{
   printf("\n");
   printf("   ");
   for (int a=1;a<=10;a++)
      printf("%d ",a);
   printf("\n");
   for (int a=1;a<=10;a++)
   {  
      if (a==10)
         printf("%d ",a);
      else
         printf("%d  ",a);
      for (int b=1;b<=10;b++)
         printf("%c ",k[a][b]);
      printf("\n");
   }
}

int main() {
printf("欢迎来到酸酸的小世界\n");
Sleep(2000);
printf("你将在这里获得一个良好的游戏体验\n");
Sleep(2000);
printf("我们要玩的游戏叫做酸酸消消乐\n");
Sleep(2000);
printf("请问是否选择查看规则(第一次游玩建议查看)\n");
Sleep(2000);
printf("要查看规则请输入2,输入1将直接进入游戏\n");
while (1)
{
   int n;
   scanf("%d",&n);
   if (n==1)
      break;
   if (n!=1&&n!=2)
   {
      printf("无效输入,请重新输入!\n");
      continue;
   }
   if (n==2)
   {
      printf("你应该接触过消灭星星这款游戏\n");Sleep(3000); 
      printf("为了方便表示,我们将所有的颜色换成字母(sstxdy)共5个表示颜色\n");Sleep(3000);
      printf("棋盘的大小为10*10,横纵坐标分别从1到10\n");Sleep(3000);
	  printf("每一个回合你可以选择棋盘上任意一个有颜色的坐标,并且输入这个坐标\n");Sleep(3000);
	  printf("若你选择的颜色与之相邻的位置存在相同颜色的方块\n");Sleep(3000);
	  printf("这些方块将被一起消除,并且你会获得一个得分\n");Sleep(3000);
	  printf("在这些方块上方的方块由于受到重力的作用将会下落\n");Sleep(3000);
	  printf("得分规则是,若你一起消除了n个方块,你将获得的分数是\n");Sleep(3000);
	  printf("n*n*10\n");Sleep(3000);
	  printf("在你发现没有可以消除的方块以后,你可以输入0 0以结束游戏\n");Sleep(3000);
	  printf("最后会根据你所剩余的方块个数相应加分\n");Sleep(3000);
	  printf("剩余0方块+1000分,每多剩余一个方块你的奖励分减少100,最低为0\n");Sleep(3000);
	  printf("在最后,你将可以知道自己的最终得分\n");Sleep(3000);
	  printf("好了,现在你已经了解了整个游戏规则,准备开始游戏吧\n\n\n\n");Sleep(3000);
	  break;
   }
}
srand(time(0));
printf("请输入你的姓名(仅限英文,不能携带空格):");
scanf("%s",s);
printf("\n游戏正式开始\n");
g[1]=rand()%10+15;
if (g[1]%2)
   g[1]++;
g[2]=rand()%10+15;
if (g[2]%2)
   g[2]++;
g[3]=rand()%10+15;
if (g[3]%2)
   g[3]++;
g[4]=rand()%10+15;
if (g[4]%2)
   g[4]++;
g[5]=100-g[1]-g[2]-g[3]-g[4];
for (int a=1;a<=10;a++)
   for (int b=1;b<=10;b++)
   {
      int q=rand()%5+1;
      if (g[q])
      {
	     g[q]--;
	     tu(a,b,q);
	  }
	  else
	   b--; 
   }
dang();
int ans=0;
while (1)
{
   int x,y;
   scanf("%d%d",&x,&y);
   if (x<1||y<1||x>10||y>10)
      break;
   else
   {
   	  res=0;
      ge(x,y,x,y);
      gengxin();
      for (int a=1;a<=10;a++)
         for (int b=1;b<=10;b++)
            flag1[a][b]=0;
      dang();
      ans+=res*res*10;
   }
}
int cnt=0;
for (int a=1;a<=10;a++)
   for (int b=1;b<=10;b++)
      if (flag[a][b]==0)
         cnt++;
ans=ans+maxx(1000-100*cnt,0);
printf("玩家:%s 你的最终得分是%d\n",s,ans);
Sleep(1000);
printf("感谢你前来酸酸的小世界游玩!祝你生活愉快!\n");


	return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-02 16:34:44  更:2021-12-02 16:37:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:21:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码