求大神帮助。

Ilove__C 2015-06-19 02:23:54
1.1题目的内容与要求
内容:设计一个简单的字母连连看游戏软件。
要求:
1)程序运行时在屏幕上随机显示3*3的字母组合;
2)该字母组合8个是成对儿出现,也就是4个不同的字母,不成对儿的那个字母要与出现的其他字母不同;
3)3*3位置按行计数,分别1~9,消除某一对儿时必须是在键盘上按对了两个相同字母所在的位置;
4)若按到不成对儿那个字母所在的位置,游戏结束。若4对儿已经消除,则提示游戏过关,恭喜用户;否则提示闯关失败。
...全文
113 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ilove__C 2015-06-20
  • 打赏
  • 举报
回复
/* 自己慢慢写了。 写得不好。 大家以后提出建议哟!! 开始时间:2015年6月19日 完成时间:2015年6月20日 程序目的:编写一个字母连连看游戏 */ #include <stdio.h> #include <stdlib.h> #include <time.h> void random_order(char *,int); void show (); void display(char *,int); void main () { char totall_letters[]="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"; char generate_letters[5]={0}, double_letters[10]={0}, letters[3][3]; int i,j,m,num1,num2,num=1; show (); //显示游戏规则 srand((unsigned)time(NULL));//随机字母生成 for (i=0;i<5;i++) { m=rand()%52; generate_letters[i]=totall_letters[m]; } loop: { srand((unsigned)time(NULL));//随机字母生成 for (i=0;i<5;i++) { m=rand()%52; generate_letters[i]=totall_letters[m]; } } for (i=0;i<4;i++) //判断随机生成的字母中否有重复的字母 { for (m=i+1;m<5;m++) { if (generate_letters[m]==generate_letters[i]) goto loop; } } for (i=0;i<5;i++)//将随机获得的字母进行加倍 { double_letters[i]=generate_letters[i]; m=9-i; double_letters[m]=generate_letters[i]; } random_order(double_letters,10); //打乱数组排序 display(double_letters,10); //显示字母排序 while (num<5) //对输入的次数进行判断同时判断结果 { while(1) //提示输入位置并判断位置是否符合规则 { printf("请输入需要消除的字母所在位置\n"); printf(" 字母1:"); scanf ("%d",&num1); printf(" 字母2:"); scanf ("%d",&num2); if (num1<10&&num2<10&&num1>0&&num2>0) { break; } } if (double_letters[num1-1]==double_letters[num2-1]) //比较两个字母是否相等 { double_letters[num1-1]='@'; double_letters[num2-1]='@'; display(double_letters,10); num++; } else { printf("\n\n/ (ㄒoㄒ)/~~智商有待提高 !!游戏结束!!\n\n"); return ; } } printf("\n\n O(∩_∩)O~~ 真聪敏 !!恭喜闯关通过!!\n\n"); return ; } void random_order(char *name,int length) { char t; int i,j; int cleartimes = 10; while (cleartimes--) { i = rand()%length; j = rand()%length; if (i==j) continue; t=name[i]; name[i]=name[j]; name[j]=t; } } void show() //显示游戏规则 { printf("*******************************************\n"); printf("* 游戏讲解及规则: *\n"); printf("* 游戏运行后会在桌面上随机产生9个字母 *\n"); printf("*其中有8个字母是两两相同的。如果想消去两个*\n"); printf("*相同的字母,你必须在键盘上按对这个两个相 *\n"); printf("*字母所处的位置。如果你按到不成对的字母所 *\n"); printf("*在的位置,游戏结束。若4对成功消除,则闯关*\n"); printf("*通过! *\n"); printf("* 注:字母所在位置是按行计数的。 *\n"); printf("*******************************************\n"); } void display(char *double_letters,int length) //显示字母排序 { printf("\n*******************************************\n"); printf("游戏显示:\n"); printf(" * %c %c %c *\n",double_letters[0],double_letters[1],double_letters[2]); printf(" * %c %c %c *\n",double_letters[3],double_letters[4],double_letters[5]); printf(" * %c %c %c *\n",double_letters[6],double_letters[7],double_letters[8]); printf("\n*******************************************\n"); }
赵4老师 2015-06-19
  • 打赏
  • 举报
回复
仅供参考:
#include <windows.h>
#include <stdio.h>

void ConPrint(char *CharBuffer, int len);
void ConPrintAt(int x, int y, char *CharBuffer, int len);
void gotoXY(int x, int y);
void ClearConsole(void);
void ClearConsoleToColors(int ForgC, int BackC);
void SetColorAndBackground(int ForgC, int BackC);
void SetColor(int ForgC);
void HideTheCursor(void);
void ShowTheCursor(void);

int main(int argc, char* argv[])
{
   HideTheCursor();
   ClearConsoleToColors(15, 1);
   ClearConsole();
   gotoXY(1, 1);
   SetColor(14);
   printf("This is a test...\n");
   Sleep(5000);
   ShowTheCursor();
   SetColorAndBackground(15, 12);
   ConPrint("This is also a test...\n", 23);
   SetColorAndBackground(1, 7);
   ConPrintAt(22, 15, "This is also a test...\n", 23);
   gotoXY(0, 24);
   SetColorAndBackground(7, 1);
   return 0;
}

//This will clear the console while setting the forground and
//background colors.
void ClearConsoleToColors(int ForgC, int BackC)
{
   WORD wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F);
   //Get the handle to the current output buffer...
   HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
   //This is used to reset the carat/cursor to the top left.
   COORD coord = {0, 0};
   //A return value... indicating how many chars were written
   //not used but we need to capture this since it will be
   //written anyway (passing NULL causes an access violation).
   DWORD count;

   //This is a structure containing all of the console info
   // it is used here to find the size of the console.
   CONSOLE_SCREEN_BUFFER_INFO csbi;
   //Here we will set the current color
   SetConsoleTextAttribute(hStdOut, wColor);
   if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
   {
      //This fills the buffer with a given character (in this case 32=space).
      FillConsoleOutputCharacter(hStdOut, (TCHAR) 32, csbi.dwSize.X * csbi.dwSize.Y, coord, &count);

      FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, csbi.dwSize.X * csbi.dwSize.Y, coord, &count);
      //This will set our cursor position for the next print statement.
      SetConsoleCursorPosition(hStdOut, coord);
   }
}

//This will clear the console.
void ClearConsole()
{
   //Get the handle to the current output buffer...
   HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
   //This is used to reset the carat/cursor to the top left.
   COORD coord = {0, 0};
   //A return value... indicating how many chars were written
   //   not used but we need to capture this since it will be
   //   written anyway (passing NULL causes an access violation).
   DWORD count;
   //This is a structure containing all of the console info
   // it is used here to find the size of the console.
   CONSOLE_SCREEN_BUFFER_INFO csbi;
   //Here we will set the current color
   if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
   {
      //This fills the buffer with a given character (in this case 32=space).
      FillConsoleOutputCharacter(hStdOut, (TCHAR) 32, csbi.dwSize.X * csbi.dwSize.Y, coord, &count);
      FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, csbi.dwSize.X * csbi.dwSize.Y, coord, &count);
      //This will set our cursor position for the next print statement.
      SetConsoleCursorPosition(hStdOut, coord);
   }
}

//This will set the position of the cursor
void gotoXY(int x, int y)
{
   //Initialize the coordinates
   COORD coord = {x, y};
   //Set the position
   SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}

//This will set the forground color for printing in a console window.
void SetColor(int ForgC)
{
   WORD wColor;
   //We will need this handle to get the current background attribute
   HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
   CONSOLE_SCREEN_BUFFER_INFO csbi;

   //We use csbi for the wAttributes word.
   if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
   {
      //Mask out all but the background attribute, and add in the forgournd color
      wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F);
      SetConsoleTextAttribute(hStdOut, wColor);
   }
}

//This will set the forground and background color for printing in a console window.
void SetColorAndBackground(int ForgC, int BackC)
{
   WORD wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F);;
   SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), wColor);
}

//Direct console output
void ConPrint(char *CharBuffer, int len)
{
   DWORD count;
   WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), CharBuffer, len, &count, NULL);
}

//Direct Console output at a particular coordinate.
void ConPrintAt(int x, int y, char *CharBuffer, int len)
{
   DWORD count;
   COORD coord = {x, y};
   HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
   SetConsoleCursorPosition(hStdOut, coord);
   WriteConsole(hStdOut, CharBuffer, len, &count, NULL);
}

//Hides the console cursor
void HideTheCursor()
{
   CONSOLE_CURSOR_INFO cciCursor;
   HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

   if(GetConsoleCursorInfo(hStdOut, &cciCursor))
   {
      cciCursor.bVisible = FALSE;
	  SetConsoleCursorInfo(hStdOut, &cciCursor);
   }
}

//Shows the console cursor
void ShowTheCursor()
{
   CONSOLE_CURSOR_INFO cciCursor;
   HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

   if(GetConsoleCursorInfo(hStdOut, &cciCursor))
   {
      cciCursor.bVisible = TRUE;
	  SetConsoleCursorInfo(hStdOut, &cciCursor);
   }
}

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧