今天做一个有趣的扫雷小游戏 现在正式开始设计。
思路:想要根本上实现必须拥有 实现函数的主体.c文件 头文件.h 及头文件实现.c。
头文件.h
# pragma once
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
# define EASY_COUNT 10
# define ROW 9
# define COL 9
# define ROWS ROW+ 2
# define COLS COL+ 2 void InitBoard ( char board[ ROWS] [ COLS] , int rows, int cols, char set) ; void DisplayBoard ( char board[ ROWS] [ COLS] , int row, int col) ; void SetMine ( char board[ ROWS] [ COLS] , int row, int col) ; void FindMine ( char mine[ ROWS] [ COLS] , char show[ ROWS] [ COLS] , int row, int col) ;
头文件的实现
# include "game.h" void InitBoard ( char board[ ROWS] [ COLS] , int rows, int cols, char set)
{ int i = 0 ; for ( i = 0 ; i < rows; i++ ) { int j = 0 ; for ( j = 0 ; j < cols; j++ ) { board[ i] [ j] = set; } }
}
void DisplayBoard ( char board[ ROWS] [ COLS] , int row, int col)
{ int i = 0 ; printf ( "--------扫雷游戏-------\n" ) ; for ( i = 0 ; i <= col; i++ ) { printf ( "%d " , i) ; } printf ( "\n" ) ; for ( i = 1 ; i <= row; i++ ) { printf ( "%d " , i) ; int j = 0 ; for ( j = 1 ; j <= col; j++ ) { printf ( "%c " , board[ i] [ j] ) ; } printf ( "\n" ) ; }
}
void SetMine ( char board[ ROWS] [ COLS] , int row, int col)
{ int count = EASY_COUNT; while ( count) { int x = rand ( ) % row + 1 ; int y = rand ( ) % col + 1 ; if ( board[ x] [ y] == '0' ) { board[ x] [ y] = '1' ; count-- ; } }
}
int GetMineCount ( char mine[ ROWS] [ COLS] , int x, int y)
{ return ( mine[ x- 1 ] [ y] + mine[ x- 1 ] [ y- 1 ] + mine[ x] [ y - 1 ] + mine[ x+ 1 ] [ y- 1 ] + mine[ x+ 1 ] [ y+ 1 ] + mine[ x] [ y+ 1 ] + mine[ x- 1 ] [ y+ 1 ] - 8 * '0' ) ;
}
void FindMine ( char mine[ ROWS] [ COLS] , char show[ ROWS] [ COLS] , int row, int col)
{ int x = 0 ; int y = 0 ; int win = 0 ; while ( win < row* col- EASY_COUNT) { printf ( "请输⼊要排查的坐标:>" ) ; scanf ( "%d %d" , & x, & y) ; if ( x >= 1 && x <= row && y >= 1 && y <= col) { if ( mine[ x] [ y] == '1' ) { printf ( "很遗憾,你被炸死了\n" ) ; DisplayBoard ( mine, ROW, COL) ; break ; } else { int count = GetMineCount ( mine, x, y) ; show[ x] [ y] = count + '0' ; DisplayBoard ( show, ROW, COL) ; win++ ; } } else { printf ( "坐标⾮法,重新输⼊\n" ) ; } } if ( win == row * col - EASY_COUNT) { printf ( "恭喜你,排雷成功\n" ) ; DisplayBoard ( mine, ROW, COL) ; }
}
test.c
# include "game.h"
void menu ( )
{ printf ( "***********************\n" ) ; printf ( "***** 1. play *****\n" ) ; printf ( "***** 0. exit *****\n" ) ; printf ( "***********************\n" ) ;
}
void game ( )
{ char mine[ ROWS] [ COLS] ; char show[ ROWS] [ COLS] ; InitBoard ( mine, ROWS, COLS, '0' ) ; InitBoard ( show, ROWS, COLS, '*' ) ; DisplayBoard ( show, ROW, COL) ; SetMine ( mine, ROW, COL) ; FindMine ( mine, show, ROW, COL) ;
}
int main ( )
{ int input = 0 ; srand ( ( unsigned int ) time ( NULL ) ) ; do { menu ( ) ; printf ( "请选择:>" ) ; scanf ( "%d" , & input) ; switch ( input) { case 1 : game ( ) ; break ; case 0 : printf ( "退出游戏\n" ) ; break ; default : printf ( "选择错误,重新选择\n" ) ; break ; } } while ( input) ; return 0 ;
}
仅供参考!!