root/snippet/console_mine/mine.c

Revision 85, 3.0 KB (checked in by aqua, 21 months ago)

add console mine project

Line 
1#include <stdio.h>
2#include <stdlib.h>
3#include <string.h>
4
5#include <time.h>
6
7#include "libmine.h"
8
9static void mine_stat( int* map, int* show, int option );
10
11int main( int argc, char** argv ){
12
13        int map[WIDTH*HEIGHT];
14        int show[WIDTH*HEIGHT];
15
16        int status;
17        int x, y, mine;
18
19        char yn;
20
21        do {
22
23                status = GAME_START;
24                do {
25
26                        if( status == GAME_START )
27                                printf( "Starting New Game \n\n" );
28
29                        do {
30                                printf( "Input: x y mine(0/1):" );
31                                scanf( " %d %d %d", &x, &y, &mine );
32
33                                if( status == GAME_START && mine != 0 )
34                                        printf( "You must not select mine at first time\n" );
35
36                                else if( mine == 2 )
37                                        mine_stat( map, show, GAME_FULL_STAT );
38
39                                else if( x < 0 || x >= WIDTH )
40                                        printf( "Wrong range x: %d\n", x );
41
42                                else if( y < 0 || y >= HEIGHT )
43                                        printf( "Wrong range y: %d\n", y );
44
45                                else if( mine != 0 && mine != 1 )
46                                        printf( "Wrong mine: %d\n", mine );
47
48                                else
49                                        break;
50
51                        } while( 1 );
52
53                        if( status == GAME_START ){
54                                memset( show, UNCHECKED, sizeof(int)*WIDTH*HEIGHT );
55                                mine_start( map, MAXMINE, 0, 0 );
56
57                                status = GAME_CONT;
58                        } 
59
60                        status = mine_tick( map, show, x, y, mine );
61                        if( status == GAME_END ){
62                                printf( "Game End: It was mine!\n" );
63
64                                mine_stat( map, show, GAME_END );
65                                break;
66                        }
67                        else if( status == GAME_END ){
68                                printf( "You already checked there.\n" );
69                        }       
70                        else if( mine_end( map, show ) == GAME_END ){
71                                mine_stat( map, show, GAME_END );
72
73                                printf( "Congraturation!!!\n\n\n" );
74                                break;
75                        }
76                        mine_stat( map, show, GAME_CONT );
77
78                } while( 1 );
79
80                printf( "\n\nStarting New Game? (Y/N): " );
81                scanf( " %c", &yn );
82
83        } while ( yn == 'y' || yn == 'Y' );
84
85        return 0;
86
87}
88
89static void mine_stat( int* map, int* show, int option ){
90
91        int i, j;
92
93        // Draw Horizontal Index Line
94        for( i = 0 ; i <= WIDTH ; i++ )
95                printf( "----" );
96
97        printf( "\n    " );
98
99        for( i = 0 ; i < WIDTH ; i++ )
100                printf( "%3d ", i );
101
102        printf( "\n" );
103
104        for( i = 0 ; i <= WIDTH ; i++ )
105                printf( "----" );
106
107        printf( "\n" );
108
109        for(j = 0 ; j < HEIGHT ; j++ ){
110
111                // Draw Vertical Index
112                printf( "%3d:", j );
113
114                // Show status
115                for( i = 0 ; i < WIDTH ; i++ ){
116                        if( option == GAME_END ){
117
118                                if( show[j*WIDTH+i] == MINE ){
119                                        if( map[j*WIDTH+i] == -1 )
120                                                printf( "  # " );
121                                        else
122                                                printf( "  X " );
123                                }
124                                else{
125                                        if( map[j*WIDTH+i] == MINE )
126                                                printf( "  # " );
127                                        else
128                                                printf( "%3d ", map[j*WIDTH+i] );
129                                }
130
131                        }
132                        else if( option == GAME_FULL_STAT ){
133
134                                if( map[j*WIDTH+i] == MINE )
135                                        printf( "  # " );
136                                else
137                                        printf( "%3d ", map[j*WIDTH+i] );
138
139                        }
140                        else {
141
142                                if( show[j*WIDTH+i] == MINE )
143                                        printf( "  # " );
144                                else if( show[j*WIDTH+i] == NUM )
145                                        printf( "%3d ", map[j*WIDTH+i] );
146                                else 
147                                        printf( "    " );
148
149                        }
150
151                }
152                printf( "\n" );
153        }
154
155        // Draw Horizontal Line
156        for( i = 0 ; i <= WIDTH ; i++ )
157                printf( "----" );
158
159        printf( "\n" );
160}
Note: See TracBrowser for help on using the browser.