马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 风过无痕丶 于 2018-2-7 16:48 编辑 #include <iostream>
#include <cstdio>
#include <conio.h>
#include <time.h>
#include <Windows.h>
#include <cstdlib>
using namespace std;
const int MAX_BOOM_A = 15;
const int MAX_BOOM_B = 28;
int x,y; // 横纵坐标
int sum_mine; // 雷的个数
// 暂定 1为未知区域, 2为现行选中位置, 3为雷
char juzhen[16][16]{
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
};
char juzhen_tnt[16][16]{
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
};
class saolei_a{
public:
char mine; // 雷
char Unknown_region;// 未知区域
char Choice_region; // 选中区域
// 先把图画出来!
void huatu_saolei(void){
cout << "还剩下" << sum_mine << "个雷" ;
cout << '\n' << '\n';
cout << '\t' << '\t' << '\t';
cout << " 欢迎来到扫雷小游戏!" << endl;
cout << '\t' << '\t' << '\t';
cout << "按下字母 w a s d 移动光标!";
cout << '\n' << '\n' << '\n' << '\n';
for (int i = 0; i < 16; i++){
// 奶奶的!三个TAB又多了,只有加几个空格了!
cout << '\t' << '\t' << " ";
for (int j = 0; j < 16; j++){
if (juzhen[i][j] == 1){
cout << "■"; // 如果数组内容为1 就画 方块
}
else if (juzhen[i][j] == 2){
cout << "□"; // 如果数组内容为2 就画 空方块
}
else if (juzhen[i][j] == 8){
cout << "★"; // 如果数组内容为8 画五角星
}
}
cout << '\n';
}
}
// 再搞个定位的函数算了,不然不知道怎么移动了~
// 头绪不是很清晰,就用迭代来找吧~
void gps_saolei(int *x, int *y){
for (int i = 0; i < 16; i++){
for (int j = 0; j < 16; j++){
if (juzhen[i][j] == 2){ // 2为现行选中项的标识符
*x = i;
*y = j;
}
}
}
}
// 移动现行选中项
void Choice_saolei(void){
Choice_region = getch();
switch(Choice_region){
case 'w' :
gps_saolei(&x,&y); //获取到现行选中项在什么位置!
juzhen[x-1][y] = 2; // 把现在的位置变成 选中
juzhen[x][y] = 1; // 把刚才的位置变成 未选中
break;
case 'a':
gps_saolei(&x,&y);
juzhen[x][y-1] = 2;
juzhen[x][y] = 1;
break;
case 's':
gps_saolei(&x,&y);
juzhen[x+1][y] = 2;
juzhen[x][y] = 1;
break;
case 'd' :
gps_saolei(&x,&y);
juzhen[x][y+1] = 2;
juzhen[x][y] = 1;
break;
case 'g':
gps_saolei(&x,&y);
if (prove_tnt(x,y)){
cout << "游戏结束!";
exit(-1);
}
else{
cout << "那就继续来吧!" << endl;
}
break;
}
}
// 来吧! 我要开始造雷了!
// 我的思路是,选择挖的时候调用一次这个函数,
// 反馈回去,这是不是雷区
// 雷的位置!
void mine_arr(int *x, int *y){
srand((unsigned)time(NULL));
*x = rand()% MAX_BOOM_A;
*y = rand()% MAX_BOOM_A;
}
// 雷的个数
int num_mine_arr(void){
int sum;
srand((unsigned)time(NULL));
sum = rand()% MAX_BOOM_B;
return sum;
}
// 这里开始造雷
void tnt_arr(void){
int tnt_x,tnt_y;
int sum = num_mine_arr();
// 不知道为什么~次数执行够了的~雷只造一个出来!!!
for (int i = 0; i <= sum; i++){
mine_arr(&tnt_x,&tnt_y);
juzhen_tnt[tnt_x][tnt_y] = 8;
sum_mine++;
}
}
// 来吧!这里开始挖雷
// emmmm... 怎么挖呢。。。
// 搞两个数组!一个来操作!,一个来验证!
bool prove_tnt(int x, int y){
if (juzhen_tnt[x][y] == 8){
// 有雷
return true;
}
else {
return false;
}
}
};
int main(){
saolei_a add;
do {
system("cls");
if (sum_mine == 0){
add.tnt_arr(); // 没雷! 造!
}
else {
; // 有了就不造了
}
add.huatu_saolei();
add.Choice_saolei();
}while(1);
return 0;
}
奶奶的~ 循环次数是执行够了的~死活都给一个雷~ 求大佬解惑~
#include <iostream>
#include <cstdio>
#include <conio.h>
#include <time.h>
#include <Windows.h>
#include <cstdlib>
using namespace std;
const int MAX_BOOM_A = 15;
const int MAX_BOOM_B = 28;
int x, y; // 横纵坐标
int sum_mine; // 雷的个数
// 暂定 1为未知区域, 2为现行选中位置, 3为雷
char juzhen[16][16] =
{
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
};
char juzhen_tnt[16][16] =
{
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
};
class saolei_a {
public:
char mine; // 雷
char Unknown_region; // 未知区域
char Choice_region; // 选中区域
// 先把图画出来!
void huatu_saolei(void) {
cout << "还剩下" << sum_mine << "个雷";
cout << '\n' << '\n';
cout << '\t' << '\t' << '\t';
cout << " 欢迎来到扫雷小游戏!" << endl;
cout << '\t' << '\t' << '\t';
cout << "按下字母 w a s d 移动光标!";
cout << '\n' << '\n' << '\n' << '\n';
for(int i = 0; i < 16; i++)
{
// 奶奶的!三个TAB又多了,只有加几个空格了!
cout << '\t' << '\t' << " ";
for(int j = 0; j < 16; j++) {
if(juzhen[i][j] == 1) {
cout << "■"; // 如果数组内容为1 就画 方块
}
else if(juzhen[i][j] == 2) {
cout << "□"; // 如果数组内容为2 就画 空方块
}
else if(juzhen[i][j] == 8) {
cout << "★"; // 如果数组内容为8 画五角星
}
}
cout << '\n';
}
}
// 再搞个定位的函数算了,不然不知道怎么移动了~
// 头绪不是很清晰,就用迭代来找吧~
void gps_saolei(int *x, int *y) {
for(int i = 0; i < 16; i++) {
for(int j = 0; j < 16; j++) {
if(juzhen[i][j] == 2) { // 2为现行选中项的标识符
*x = i;
*y = j;
}
}
}
}
// 移动现行选中项
void Choice_saolei(void) {
Choice_region = getch();
switch(Choice_region) {
case 'w':
gps_saolei(&x, &y); //获取到现行选中项在什么位置!
juzhen[x - 1][y] = 2; // 把现在的位置变成 选中
juzhen[x][y] = 1; // 把刚才的位置变成 未选中
break;
case 'a':
gps_saolei(&x, &y);
juzhen[x][y - 1] = 2;
juzhen[x][y] = 1;
break;
case 's':
gps_saolei(&x, &y);
juzhen[x + 1][y] = 2;
juzhen[x][y] = 1;
break;
case 'd':
gps_saolei(&x, &y);
juzhen[x][y + 1] = 2;
juzhen[x][y] = 1;
break;
case 'g':
gps_saolei(&x, &y);
if(prove_tnt(x, y)) {
cout << "游戏结束!";
exit(-1);
}
else {
cout << "那就继续来吧!" << endl;
}
break;
}
}
// 来吧! 我要开始造雷了!
// 我的思路是,选择挖的时候调用一次这个函数,
// 反馈回去,这是不是雷区
// 雷的位置!
void mine_arr(int *x, int *y) {
//srand((unsigned)time(NULL)); // 问题在这里
*x = rand() % MAX_BOOM_A;
*y = rand() % MAX_BOOM_A;
}
// 雷的个数
int num_mine_arr(void) {
int sum;
//srand((unsigned)time(NULL)); // 问题在这里
sum = rand() % MAX_BOOM_B;
return sum;
}
// 这里开始造雷
void tnt_arr(void)
{
int tnt_x, tnt_y;
int sum = num_mine_arr();
for(int i = 0; i < sum; i++)
{
mine_arr(&tnt_x, &tnt_y);
printf("x: %.2d,y: %.2d\n", tnt_x, tnt_y); // debug
juzhen_tnt[tnt_x][tnt_y] = 8;
juzhen[tnt_x][tnt_y] = 8; // 在huatu_saolei函数中只看juzhen
//for(int j = 0; j < 16; j++) {
// if(juzhen[i][j] == 1) {
// cout << "■"; // 如果数组内容为1 就画 方块
// }
// else if(juzhen[i][j] == 2) {
// cout << "□"; // 如果数组内容为2 就画 空方块
// }
// else if(juzhen[i][j] == 8) {
// cout << "★"; // 如果数组内容为8 画五角星
// }
//}
sum_mine++;
}
getchar(); // debug
}
// 来吧!这里开始挖雷
// emmmm... 怎么挖呢。。。
// 搞两个数组!一个来操作!,一个来验证!
bool prove_tnt(int x, int y) {
if(juzhen_tnt[x][y] == 8) {
// 有雷
return true;
}
else {
return false;
}
}
};
int main(void)
{
srand((unsigned)time(NULL));
saolei_a add;
do {
system("cls");
if(sum_mine == 0) {
add.tnt_arr(); // 没雷! 造!
}
else {
; // 有了就不造了
}
add.huatu_saolei();
add.Choice_saolei();
}
while(1);
return 0;
}
|