- 最後登錄
- 2023-5-17
- 在線時間
- 0 小時
- 註冊時間
- 2008-12-24
- 閱讀權限
- 95
- 精華
- 0
- UID
- 5519821
- 帖子
- 421
- 積分
- 1448 點
- 潛水值
- 48495 米
| - #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
- #define MAPSIZE 10
- #define BOOM 1
- class Game
- {
- public:
- Game();
- void setBoom();
- void showMap_();
- void showMap();
- void gameStart();
- void open(int ,int );
- private:
- char map[MAPSIZE][MAPSIZE];
- int mapMask[MAPSIZE][MAPSIZE];
- };
- int main()
- {
- Game *game = new Game();
- game->showMap_();
- game->gameStart();
- return 0;
- }
- Game::Game()
- {
- int j,k,temp;
- setBoom();
- for(j = 0;j < MAPSIZE;j ++)
- {
- for(k = 0;k < MAPSIZE;k ++)
- {
- temp = 0;
- if(map[j][k] != 'b')
- {
- if(j > 0 && map[j - 1][k] == 'b')
- {
- temp ++;
- }
- if(j > 0 && k > 0 && map[j - 1][k - 1] == 'b')
- {
- temp ++;
- }
- if(k > 0 && map[j][k - 1] == 'b')
- {
- temp ++;
- }
- if(j < MAPSIZE - 1 && k > 0 && map[j + 1][k - 1] == 'b')
- {
- temp ++;
- }
- if(j < MAPSIZE - 1 && map[j + 1][k] == 'b')
- {
- temp ++;
- }
- if(j < MAPSIZE - 1 && k < MAPSIZE - 1 && map[j + 1][k + 1] == 'b')
- {
- temp ++;
- }
- if(k < MAPSIZE - 1 && map[j][k + 1] == 'b')
- {
- temp ++;
- }
- if(j > 0 && k < MAPSIZE - 1 && map[j - 1][k + 1] == 'b')
- {
- temp ++;
- }
- map[j][k] = temp + '0';
- }
- }
- }
- memset(mapMask,0,sizeof(mapMask));
- }
- void Game::setBoom()
- {
- int j,k,l;
- memset(map,0,sizeof(map));
- srand(time(NULL));
- for(j = 0;j < BOOM;j ++)
- {
- do
- {
- k = rand() % MAPSIZE;
- l = rand() % MAPSIZE;
- }while(map[k][l] != 0);
- map[k][l] = 'b';
- }
- }
- void Game::showMap_()
- {
- int j,k;
- for(j = 0;j < MAPSIZE;j ++)
- {
- for(k = 0;k < MAPSIZE;k ++)
- {
- if(mapMask[j][k] == 0)
- printf("%c",2);
- else
- printf("%c",map[j][k]);
- }
- printf("\n");
- }
- }
- void Game::showMap()
- {
- int j,k;
- for(j = 0;j < MAPSIZE;j ++)
- {
- for(k = 0;k < MAPSIZE;k ++)
- {
- printf("%c",map[j][k]);
- }
- printf("\n");
- }
- }
- void Game::gameStart()
- {
- int j,k,temp;
- while(1)
- {
- scanf("%d%d",&j,&k);
- if(j < 0 || j > MAPSIZE - 1 || k < 0 || k > MAPSIZE - 1)
- continue;
- if(map[j][k] == 'b')
- {
- printf("you lose...\n");
- exit(1);
- }
- else
- {
- open(j,k);
- }
- showMap_();
- temp = 0;
- for(j = 0;j < MAPSIZE;j ++)
- for(k = 0;k < MAPSIZE;k ++)
- if(mapMask[j][k] == 1)
- temp ++;
- if(temp + BOOM == MAPSIZE * MAPSIZE)
- {
- printf("you win...\n");
- exit(1);
- }
- }
- }
- void Game::open(int j,int k)
- {
- if(mapMask[j][k] != 0)
- return;
- if(j >= 0 && k >= 0 && j < MAPSIZE && k < MAPSIZE)
- mapMask[j][k] = 1;
- if(map[j][k] == '0')
- {
- if(j > 0 && k > 0)
- open(j - 1,k - 1);
- if(k > 0)
- open(j,k - 1);
- if(j < MAPSIZE - 1 && k > 0)
- open(j + 1,k - 1);
- if(j < MAPSIZE - 1)
- open(j + 1,k);
- if(j < MAPSIZE - 1 && k < MAPSIZE - 1)
- open(j + 1,k + 1);
- if(k < MAPSIZE - 1)
- open(j,k + 1);
- if(j > 0 && k < MAPSIZE - 1)
- open(j - 1,k + 1);
- if(j > 0)
- open(j - 1,k);
- }
- }
複製代碼 ... |
|