文章标题

来源:互联网 发布:网络防御技术 编辑:程序博客网 时间:2024/06/15 02:33

三子棋小思路
.1.在屏幕打印出一个棋盘;

2.人移动棋子;

3.检查输赢;

4.电脑移动棋子;

5.检查输赢;

代码如下:
game.h

#define _CRT_SECURE_NO_WARNINGS 1#ifndef __GAME_H__#define __GAME_H__#include <stdio.h>#include <stdlib.h>#include <time.h>#include <string.h>#define ROW 10#define COL 10#define DEFAULT_COUNT 20#define ROWS ROW+2#define COLS COL+2void set_mine(char mine[ROWS+2][COLS+2], int row, int col);void display(char board[ROWS+2][COLS+2], int row, int col);int  get_mine_count(char board[ROWS][COLS], int row, int col);void play_game(char mine[ROWS+2][COLS+2], char show[ROWS][COLS]);#endif 

game.c

#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"//产生随机数int get_random_num(int m, int n){    return rand()%(n-m+1)+m;}//设置雷阵void set_mine(char mine[ROWS][COLS], int row, int col){    int count = DEFAULT_COUNT;    while(count)//雷的个数    {        int x = get_random_num(1, 10);        int y = get_random_num(1, 10);        if(mine[x][y] == '0')        {        mine[x][y] = '1';            count--;        }    }}//打印雷阵(排雷结果)信息void display(char board[ROWS][COLS], int row, int col){    int i = 0;    int j = 0;    printf("    ");    for(i=1; i<=10; i++)    {        printf("%d ", i);    }    printf("\n");    for(i=1; i<=10; i++)    {        printf("---");    }    printf("\n");    for(i=1; i<row-1; i++)    {        printf("%2d| ", i);        for(j=1; j<col-1; j++)        {            printf("%c ", board[i][j]);        }        printf("\n");    }}//统计非雷区周围的雷的个数int  get_mine_count(char board[ROWS][COLS], int x, int y){    return (board[x-1][y-1]-'0')+(board[x][y-1]-'0')+(board[x+1][y-1]-'0')+(board[x+1][y]-'0')+(board[x+1][y+1]-'0')+(board[x][y+1]-'0')+(board[x-1][y+1]-'0')+(board[x-1][y-1]-'0');}//游戏的主逻辑void play_game(char mine[ROWS][COLS], char show[ROWS][COLS]){    while(1)    {        int x = 0;        int y = 0;        int win = 0;        printf("请输入坐标>:");        scanf("%d%d", &x, &y);        if(((x>=1)&&(x<=10))&&((y>=1)&&(y<=10)))        {            if(mine[x][y] == '1')            {                printf("被炸死\n");                display(mine, ROWS, COLS);                break;            }            else            {                int ret = 0;                win++;                ret = get_mine_count(mine, x, y);                show[x][y] = ret+'0';                display(show, ROWS, COLS);                if(win == COL*ROW-DEFAULT_COUNT)                {                    printf("雷排完了\n");                    display(mine, ROWS, COLS);                    break;                }            }        }        else        {            printf("坐标输入有误\n");         }    }}

test.c

#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void game(){    char mine[ROWS][COLS];    char show[ROWS][COLS];    srand((unsigned int)time(NULL));    memset(mine, '0', (ROWS)*(COLS)*sizeof(char));    memset(show, '*', (ROWS)*(COLS)*sizeof(char));    set_mine(mine, ROWS, COLS);    display(mine, ROWS, COLS);    display(show, ROWS, COLS);    play_game(mine, show);}void menu(){    printf("###########################\n");    printf("###1.开始游戏 0.退出游戏###\n");    printf("###########################\n");}int main(){    int input = 0;    do     {        menu();        printf("请选择->:");        scanf("%d", &input);        switch(input)        {        case 1:            game();            break;        case 0:            break;        default:            printf("选择错误\n");            break;        }    } while (input);    return 0;}

简单的小游戏程序,实乃居家旅行,无聊练手之必备。

原创粉丝点击