搜索
查看: 266|回复: 2
打印 上一主题 下一主题

我想用鼠标控制输入,网上查找的要GetMouseMsg()函数操作,但是啊哈C没有相应的库

[复制链接]
跳转到指定楼层
楼主
 楼主| 发表于 2019-1-7 21:51:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
我接到一个编九宫格拼图游戏的任务,根据查找的相关资料,大致的算法已经准备好了,但是不知道怎么用鼠标进行输入,目前停留在用键盘移动拼图的阶段。希望有资深学者帮助我解决相关问题,也希望能对我的拼图做出一些改进。代码如下:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
int MenuReturn;
void RandMap(char map[][3]);//随机生成数
void Game(void);//游戏主循环
int Help(void);//游戏玩法介绍
int About(void);
int        Menu(void);
void DealWithMenu(int MenuReturn);
void Show(char map[][3]);
int IsWin(char map[][3]);//判断是否达成胜利条件
int main(void)
{
system("color 1E");        
while(1)        
{
  MenuReturn = Menu();
  DealWithMenu(MenuReturn);
}
    return 0;
}
int        Menu(void)
{   
    int sel = 1;        
int tem = 0;
        char kb;        
system("cls");        
printf("  数字拼图      \n");   
     printf("->开始游戏<-\n  玩法介绍  \n  关    于  \n  退出游戏  \n");  
      do
   {  
             kb = getch();
             switch(kb)
    {            
    case 'w' : tem--;
    sel += tem;
    break;                        
    case 's' : tem++;
    sel += tem;
    break;                                
    default  : NULL ;
    break;
    }               
   tem = 0;
            if (sel == 0)               
   {                    
       sel = 4;
   }               
   if (sel == 5)               
   {                  
       sel = 1;               
   }     
            system("cls");
            printf("  数字拼图\n\n\n");   
            switch (sel)               
   {         
    case 1 : printf("->开始游戏<-\n  玩法介绍  \n  关    于  \n  退出游戏  \n");
    break;
    case 2 : printf("  开始游戏  \n->玩法介绍<-\n  关    于  \n  退出游戏  \n");
    break;
    case 3 : printf("  开始游戏  \n  玩法介绍  \n->关    于<-\n  退出游戏  \n");
    break;
    case 4 : printf("  开始游戏  \n  玩法介绍  \n  关    于  \n->退出游戏-<\n");
    break;
    default: return-1;
    break;               
   }        
   }while(kb != '\r');
      return sel;
}
void DealWithMenu(int MenuReturn)
{
        int retu;
        switch(MenuReturn)
  {
  case 1 : Game();
  break;
  case 2 : retu = Help();
  break;
  case 3 : retu = About();
  break;
  case 4 : exit(0);
  break;
  case -1: printf("发生未知错误!\n");
  }
}
void Show(char map[][3])
{
        int i,j;
        system("cls");
        for(i=0;i<3;i++)
  {               
   for(j=0;j<3;j++)
   {
   printf("%2c",map[i][j]);
   }
  printf("\n");        
  }
        return;
}
void MoveNumber(char map[][3],int *Crx,int *Cry)
{
        enum {UP,DOWN ,LEFT ,RIGHT};
        int kb;
        int dx = 0,dy = 0;
        switch(getch())
  {
  case 'w' :dy--;
  kb = UP;
  break;
  case 's' :dy++;
  kb = DOWN;
  break;
  case 'a' :dx--;
  kb = LEFT;
  break;
  case 'd' :dx++;
  kb = RIGHT;
  break;
  default  :NULL;
  break;
  }
  if(kb == UP&& *Cry+1<=2)
  {
   map[*Cry][*Crx] = map[*Cry+1][*Crx];
   map[*Cry+=1][*Crx] = ' ';
  }
  if(kb == DOWN&&*Cry-1>=0)
  {
   map[*Cry][*Crx] = map[*Cry-1][*Crx];
   map[*Cry-=1][*Crx] = ' ';
  }
  if(kb == LEFT&&        *Crx+1<=2)
  {
   map[*Cry][*Crx] = map[*Cry][*Crx+1];
   map[*Cry][*Crx+=1] = ' ';
  }      
  if(kb ==RIGHT&& *Crx-1>=0)
  {
   map[*Cry][*Crx] = map[*Cry][*Crx-1];
   map[*Cry][*Crx-=1] = ' ';
  }
  return;
}
void RandMap(char map[][3])
{
int i,j,k,n = 0;
srand((unsigned)time(NULL));
for(i = 0;i<8;i++)
{
  map[0][i] = '1'+i;
}
while(n<99)//随机交换99次,这个算法不太好,容易出现死局
{
  int tem;
  j = rand()%8;
  k = rand()%8;
  if (k-j == 1||j-k == 1||k-j == 3||j-k == 3)
  {
   continue;//减小死局出现的概率,相邻位置的数字不能交换
  }
  tem = map[0][k];
  map[0][k] = map[0][j];
  map[0][j] = tem;
  n++;
}//这个算法可以实现指定数组的乱序排列,但对本游戏不太合适,乱序不保证游戏有解
map[2][2] = ' ';
}
int Help(void)
{
int judje = 0;
system("cls");
printf("点击开始游戏,程序会随机生成一个数阵,例如\n"                        "314\n286\n75 \n点击wasd移动数字,直至\n123\n456\n78 \n则胜出\n");
printf("返回菜单吗?\t   =====   y/n\n");
do
{
  int ch = getchar();
  if(ch == 'y')
  {
   return 1;
  }
  if(ch == 'n')
  {
   judje = 1;
  }
}while(judje == 1);
}
int About(void)
{
int judje = 0;
system("cls");
printf("返回菜单吗?\t   ======    y/n\n");
do
{
  int ch = getchar();
  if(ch == 'y')
  {
   return 1;
  }
  if(ch == 'n')
  {
   judje = 1;
  }
}while(judje == 1);
}
int IsWin(char map[][3])
{
int i;
int j = 0;
for(i = 0;i<8;i++)
{
  if (map[0][i] == '1'+i)
   j++;
}
if (j == 8)
{
  return 1;
}
else
{
  return 0;
}
}
void Game(void)
{
char Map[3][3] = {0};
int Crx = 2;
int Cry = 2;
RandMap(Map);//先生成一个
Show(Map);
printf("任意键开始游戏!!\n");
getch();
unsigned int t1 = time(NULL);
while(1)
{
  MoveNumber(Map,&Crx,&Cry);//用户操作
  Show(Map);
  unsigned int t2 = time(NULL);
  if(IsWin(Map))
  {
   printf("胜利~!用时%dS",t2-t1);
   return;
  }
}
}

沙发
发表于 2019-1-11 20:14:51 | 只看该作者
目前没有用鼠标进行输入的吧
板凳
发表于 2019-1-15 05:51:36 | 只看该作者
GetMouseMsg函数是VS专属的EasyX图形库,,,你可以下载一个vs的任何版本然后安装一个EasyX图形库
或者在网上找一找ege也可以
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表