需求分析
游戏开始菜单 初始化棋局(9*9) 通过控制台进行排雷
需求实现
游戏主要逻辑
void game ( ) {
char mine[ adds] [ adds] ;
char show[ adds] [ adds] ;
initchu ( mine, adds, adds, '0' ) ;
initchu ( show, adds, adds, '*' ) ;
set ( mine, add, add) ;
initprint ( show, add, add) ;
find ( mine, show, add, add) ;
}
收纳游戏主要代码
void test ( ) {
srand ( ( unsigned int ) time ( NULL ) ) ;
int input = 1 ;
do {
input = menu ( ) ;
if ( input) game ( ) ;
} while ( input) ;
}
实现游戏功能
宏定义
# pragma once
# include <stdio.h>
# include <stdio.h>
# include <windows.h>
# include <time.h>
# define add 9
# define adds add+ 2
# define islei 80
void initchu ( char bo[ adds] [ adds] , int x, int y, char ch) ;
void initprint ( char bo[ adds] [ adds] , int x, int y) ;
void set ( char mine[ adds] [ adds] , int x, int y) ;
void find ( char mine[ adds] [ adds] , char show[ adds] [ adds] , int x, int y) ;
初始化地图
void initchu ( char bo[ adds] [ adds] , int x, int y, char ch)
{
for ( int i = 0 ; i < x; i++ )
{
for ( int i1 = 0 ; i1 < y; i1++ )
{
bo[ i] [ i1] = ch;
}
}
}
打印地图
void initprint ( char bo[ adds] [ adds] , int x, int y)
{
system ( "cls" ) ;
for ( int i = 0 ; i <= x; i++ ) printf ( "%d " , i) ;
printf ( "\n" ) ;
for ( int i = 1 ; i <= x; i++ )
{
printf ( "%d " , i) ;
for ( int i1 = 1 ; i1 <= y; i1++ )
{
printf ( "%c " , bo[ i] [ i1] ) ;
}
printf ( "\n" ) ;
}
}
布置地雷
随机十个坐标
void set ( char mine[ adds] [ adds] , int x, int y)
{
int a = islei;
while ( a)
{
int xx = rand ( ) % x + 1 ;
int yy = rand ( ) % y + 1 ;
if ( mine[ xx] [ yy] == '0' )
{
mine[ xx] [ yy] = '1' ;
a-- ;
}
}
}
布雷
static void sb ( char bo[ adds] [ adds] , int x, int y) {
for ( int i = 1 ; i <= x; i++ )
{
for ( int i1 = 1 ; i1 <= y; i1++ )
{
if ( bo[ i] [ i1] == '0' ) printf ( "debug:%d %d" , i, i1) ;
}
}
}
排查地雷
计数
static int gethow ( char mine[ adds] [ adds] , int x, int y) {
return ( mine[ x - 1 ] [ y - 1 ] - '0' ) + ( mine[ x - 1 ] [ y + 1 ] - '0' ) +
( mine[ x ] [ y - 1 ] - '0' ) + ( mine[ x ] [ y + 1 ] - '0' ) +
( mine[ x + 1 ] [ y - 1 ] - '0' ) + ( mine[ x + 1 ] [ y + 1 ] - '0' ) +
( mine[ x + 1 ] [ y] - '0' ) + ( mine[ x - 1 ] [ y] - '0' ) ;
}
排查
void find ( char mine[ adds] [ adds] , char show[ adds] [ adds] , int x, int y)
{
int xx= 0 , yy= 0 , maa= 0 , asd= ( x * y ) - islei, a= 0 ;
while ( maa< asd) {
sb ( mine, add, add) ;
printf ( "排查坐标>" ) ;
scanf_s ( "%d%d" , & xx, & yy) ;
if ( xx>= 1 && xx<= x && yy>= 1 && yy<= y)
{
if ( mine[ xx] [ yy] == '1' )
{
system ( "cls" ) ;
initprint ( mine, x, y) ;
printf ( "很遗憾,你被炸死了,输入1继续>" ) ;
scanf_s ( "%d" , & a) ;
if ( a) break ;
}
else
{
int c = gethow ( mine, xx, yy) ;
c += '0' ; show[ xx] [ yy] = c;
initprint ( show, add, add) ;
maa++ ;
}
}
else {
printf ( "输入错误重新输入>" ) ;
}
}
if ( maa == asd)
{
initprint ( mine, add, add) ;
printf ( "你真厉害,完成了所有排雷,输入1继续\n" ) ;
scanf_s ( "%d" , & a) ;
if ( a) ;
}
}
main函数
# include "game.h"
int menu ( ) {
int a = 0 ;
system ( "cls" ) ;
printf ( "******************************\n" ) ;
printf ( "**** 1.play ****\n" ) ;
printf ( "**** 0.exit ****\n" ) ;
printf ( "******************************\n" ) ;
scanf_s ( "%d" , & a) ; return a;
}
void game ( ) {
char mine[ adds] [ adds] ;
char show[ adds] [ adds] ;
initchu ( mine, adds, adds, '0' ) ;
initchu ( show, adds, adds, '*' ) ;
set ( mine, add, add) ;
initprint ( show, add, add) ;
find ( mine, show, add, add) ;
}
void test ( ) {
srand ( ( unsigned int ) time ( NULL ) ) ;
int input = 1 ;
do {
input = menu ( ) ;
if ( input) game ( ) ;
} while ( input) ;
}
int main ( )
{
test ( ) ;
return 0 ;
}