游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1513|回复: 2

Tom,Jerry和奶酪

[复制链接]

2

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2009-11-5 19:39:00 | 显示全部楼层 |阅读模式
[em4]
【问题描述】
猫Tom和鼠Jerry同住在一矩阵地窖中。猫要吃鼠,鼠要吃奶酪。地窖中有2种地砖:有洞砖与无洞砖。一个洞足以让鼠钻入,但猫不能。
以菜单形式完成以下任务:
随机地生成一个地窖,并给猫、鼠和奶酪安排一个位置。如:
fffffffffffffff
fppppppppppppCf
fhfffffffffffpf
fpppmhppppppppf
fpffffffpffffff
fppppppppppTppf
fffffffffffffff
其中c表示猫,m表示鼠,h表示洞,f表示不能通行
(2) 鼠先行,猫后行。两者皆满足以下规定:
1)必须上、下、左或右移动
2)鼠必须走1步(穿过p或h)
3)猫必须走1或2步(穿过p)
(3) 当鼠吃到奶酪或猫抓到鼠时,游戏结束。
像这样的游戏该如何入手啊。好像类似于迷宫问题,我完全不懂,请老大指教·······

2

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
 楼主| 发表于 2009-11-19 11:57:00 | 显示全部楼层

Re:Tom,Jerry和奶酪

#include <stdio.h>
#include <windows.h>
#include <conio.h>
#include<iostream>
#include<ctime>
#include<stack>

//////////////////////////////////
//功能:移动光标到指定的X,Y的位置
//参数:iX ----- 列坐标
//      iY ----- 行坐标
//////////////////////////////////

void MoveCursorTo(int iX,int iY)
{
HANDLE hStd = GetStdHandle(STD_OUTPUT_HANDLE);
COORD crPlayer = {iX,iY};
SetConsoleCursorPosition(hStd, crPlayer);
}

////////////////////////////////
//用一伪随机二维数组转化成地窖
//其中砖头‘■’《==Tom和Jerry都不能通过。
//砖头‘□’《==只能Tom可以通过。
//‘★’表示奶酪。
//‘♀’表示TOM.
//‘♂’表示Jerry。
///////////////////////////////
void main(void)
{
        int iMap[24][39];
     srand(time(0));
for (int i=0; i<24; ++i)
     {
         for (int j=0; j<39; ++j)
         {
                         if ((i==0) || (j==0) || (i==24-1) || (j==39-1))
                        {
                iMap[j] =1;
                continue;
            }
             if (rand() % 100<69)
                 iMap[j] =0;
             else
             if (rand() % 100<75)
                 iMap[j]=1;
             else
                  iMap[j]=2;
         }
                 iMap[21][36]=3;
     }
for(int ni = 0; ni < 24; ni++)
{//row
   for(int nj = 0; nj < 39; nj++)
   {
    if(iMap[ni][nj] == 1)
    {
     printf("■");
    }
    else
    if(iMap[ni][nj]==2)
    {
        printf("□");
    }
    else
     if(iMap[ni][nj]==3)
         {
        printf("★");
         }
         else
    {
     printf("  ");
    }
   }
  printf("\n");
}
//////////////////万恶分割线///////////////////////////////TOM移动///////////////////////////////////////////////////////

int iRow = 2,iCol =2; //定义人物的坐标
int iInput = 0;
MoveCursorTo(iCol * 2,iRow);
printf("♀");
bool bRun = true;//表示程序继续运行
while(bRun)
{
  iInput = _getch();
  if(iInput == 27) //ESC键
   break;
  if(iInput == 224)//控制键
  {  
   iInput = _getch();
   switch(iInput)
   {
   case 75://left
    {
                if(iMap[iRow][iCol - 1] == 3)
     {
      MoveCursorTo(iCol * 2,iRow);
      printf("  ");
      iCol -= 1;
      MoveCursorTo(iCol * 2,iRow);
      printf("♀");
      MoveCursorTo(0,39);
      printf("Tom拿到了奶酪,你赢啦!\n");
      bRun = false; //结束循环
      break;
     }
     if(iMap[iRow][iCol - 1] == 0)
     {
                 if(iMap[iRow][iCol] == 0)
                 {
             MoveCursorTo(iCol * 2,iRow);
             printf("  ");
             iCol -= 1;
             MoveCursorTo(iCol * 2,iRow);
             printf("♀");
                 }
     }
         if(iMap[iRow][iCol - 1] == 0)
     {
                 if(iMap[iRow][iCol] == 2)
                 {
             MoveCursorTo(iCol * 2,iRow);
             printf("□");
             iCol -= 1;
             MoveCursorTo(iCol * 2,iRow);
             printf("♀");
                 }
     }
         if(iMap[iRow][iCol - 1] == 2)
     {
                 if(iMap[iRow][iCol] == 0)
                 {
           MoveCursorTo(iCol * 2,iRow);
           printf("  ");
           iCol -= 1;
           MoveCursorTo(iCol * 2,iRow);
           printf("♀");
                 }
     }
         if(iMap[iRow][iCol - 1] == 2)
     {
                 if(iMap[iRow][iCol] == 2)
                 {
           MoveCursorTo(iCol * 2,iRow);
           printf("□");
           iCol -= 1;
           MoveCursorTo(iCol * 2,iRow);
           printf("♀");
                 }
     }
    }
    break;
   case 72://up
    {
                if(iMap[iRow - 1][iCol] == 3)
     {
      MoveCursorTo(iCol * 2,iRow);
      printf("  ");
       iRow -= 1;
      MoveCursorTo(iCol * 2,iRow);
      printf("♀");
      MoveCursorTo(0,39);
      printf("Tom拿到了奶酪,你赢啦!\n");
      bRun = false; //结束循环
      break;
     }
     if(iMap[iRow - 1][iCol] == 0)
     {
                 if(iMap[iRow][iCol] == 0)
                 {
      MoveCursorTo(iCol * 2,iRow);
      printf("  ");
      iRow -= 1;
      MoveCursorTo(iCol * 2,iRow);
      printf("♀");
                 }
     }
         if(iMap[iRow - 1][iCol] == 0)
     {
                 if(iMap[iRow][iCol] == 2)
                 {
      MoveCursorTo(iCol * 2,iRow);
      printf("□");
      iRow -= 1;
      MoveCursorTo(iCol * 2,iRow);
      printf("♀");
                 }
     }
         if(iMap[iRow - 1][iCol] == 2)
     {
                 if(iMap[iRow][iCol] == 0)
                 {
      MoveCursorTo(iCol * 2,iRow);
      printf("  ");
      iRow -= 1;
      MoveCursorTo(iCol * 2,iRow);
      printf("♀");
                 }
     }
         if(iMap[iRow - 1][iCol] == 2)
     {
                 if(iMap[iRow][iCol] == 2)
                 {
      MoveCursorTo(iCol * 2,iRow);
      printf("□");
      iRow -= 1;
      MoveCursorTo(iCol * 2,iRow);
      printf("♀");
                 }
     }
    }
    break;
   case 77://right
    {
                if(iMap[iRow][iCol + 1] == 3)
     {
      MoveCursorTo(iCol * 2,iRow);
      printf("  ");
      iCol += 1;
      MoveCursorTo(iCol * 2,iRow);
      printf("♀");
          MoveCursorTo(0,39);
      printf("Tom拿到了奶酪,你赢啦!\n");
      bRun = false; //结束循环
      break;
     }
     if(iMap[iRow][iCol + 1] == 0)
     {
                 if(iMap[iRow][iCol] == 0)
                 {
          MoveCursorTo(iCol * 2,iRow);
          printf("  ");
          iCol += 1;
          MoveCursorTo(iCol * 2,iRow);
          printf("♀");
                 }
     }
         if(iMap[iRow][iCol + 1] == 0)
     {
                 if(iMap[iRow][iCol] == 2)
                 {
          MoveCursorTo(iCol * 2,iRow);
          printf("□");
          iCol += 1;
          MoveCursorTo(iCol * 2,iRow);
          printf("♀");
                 }
     }
         if(iMap[iRow][iCol + 1] == 2)
     {
                 if(iMap[iRow][iCol] == 0)
                 {
          MoveCursorTo(iCol * 2,iRow);
          printf("  ");
          iCol += 1;
          MoveCursorTo(iCol * 2,iRow);
          printf("♀");
                 }
     }
         if(iMap[iRow][iCol + 1] == 2)
     {
                 if(iMap[iRow][iCol] == 2)
                 {
          MoveCursorTo(iCol * 2,iRow);
          printf("□");
          iCol += 1;
          MoveCursorTo(iCol * 2,iRow);
          printf("♀");
                 }
     }
    }
    break;
   case 80://down
    {
                if(iMap[iRow + 1][iCol] == 3)
     {
      MoveCursorTo(iCol * 2,iRow);
      printf("  ");
      iRow += 1;
      MoveCursorTo(iCol * 2,iRow);
      printf("♀");
          MoveCursorTo(0,39);
      printf("Tom拿到了奶酪,你赢啦!\n");
      bRun = false; //结束循环
      break;
     }
     if(iMap[iRow + 1][iCol] == 0)
     {
                 if(iMap[iRow][iCol] == 0)
                 {
           MoveCursorTo(iCol * 2,iRow);
           printf("  ");
           iRow += 1;
           MoveCursorTo(iCol * 2,iRow);
           printf("♀");
                 }
     }
         if(iMap[iRow + 1][iCol] == 0)
     {
                 if(iMap[iRow][iCol] == 2)
                 {
           MoveCursorTo(iCol * 2,iRow);
           printf("□");
           iRow += 1;
           MoveCursorTo(iCol * 2,iRow);
           printf("♀");
                 }
     }
         if(iMap[iRow + 1][iCol] == 2)
     {
                 if(iMap[iRow][iCol] == 0)
                 {
           MoveCursorTo(iCol * 2,iRow);
           printf("  ");
           iRow += 1;
           MoveCursorTo(iCol * 2,iRow);
           printf("♀");
                 }
     }
         if(iMap[iRow + 1][iCol] == 2)
     {
                 if(iMap[iRow][iCol] == 2)
                 {
           MoveCursorTo(iCol * 2,iRow);
           printf("□");
           iRow += 1;
           MoveCursorTo(iCol * 2,iRow);
           printf("♀");
                 }
     }
    }
    break;
   }
  }  
  //////////////////万恶分割线///////////////////////////////Jerry移动///////////////////////////////////////////////////////

}
}


2

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
 楼主| 发表于 2009-11-19 11:58:00 | 显示全部楼层

Re:Tom,Jerry和奶酪

基本的功能已经实现了,就是没什么算法,谁能教我弄个猫,也就是怪物的AI寻路啊,急急急急急急急急急急急急急急急急急急急急急急急急
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-18 01:47

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表