三子棋小游戏及如何让朋友也能玩自己写的游戏(程序)(exe如何附带动态链接库dll)C语言从入门到入土(入门特别篇)(三)

简介: 一:三子棋 1.游戏的基本开始流程() 2.三子棋的实现 2.1第一步写出基本流程 2.2第二步打印菜单 2.3游戏的实现 2.3.1初始化棋盘 2.3.2打印棋盘 2.3.3玩家下棋 2.3.4电脑下棋 2.3.5判断 2.4游戏的整个代码 game.c: 2.5三子棋的扩展 二:vs如何发布exe文件并附带动态链接库 第一步:vs->工具->命令行->开发者 PowerShell(P) 第二步:查看vs 是Debug还是Releas 是x86还是x64 第三步:找到exe所在位置 第四步:查询你exe文件所需要的的动态链接库(dll)

2.4游戏的整个代码


test.c:


#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void menu()
{
  printf("**********************************\n");
  printf("******         1.play       ******\n");
  printf("******         2.exit       ******\n");
  printf("**********************************\n");
}
//1.初始化棋盘
//2.打印棋盘
//3.玩家下棋
//4.电脑下棋
//5.判断
void game()
{
  char Board[ROW][COL] = { 0 };
  //初始化棋盘
  InitBoard(Board, ROW, COL);
  //打印棋盘
  DisplayBoard(Board, ROW, COL);
  //下棋
  int ret = 0;
  while (1)
  {
    //玩家下棋  *
    printf("玩家下棋:\n");
    Player_move(Board, ROW, COL);
    DisplayBoard(Board, ROW, COL);
    ret = Is_win(Board, ROW, COL);
    if (ret != 'C')
    {
      break;
    }
    //电脑下棋  #
    printf("电脑下棋\n");
    Computer_move(Board, ROW, COL);
    DisplayBoard(Board, ROW, COL);
    ret = Is_win(Board, ROW, COL);
    if (ret != 'C')
    {
      break;
    }
  }
  if (ret == '*')
  {
    printf("玩家胜利!!!\n");
  }
  else if (ret == '#')
  {
    printf("电脑胜利!!!\n");
  }
  else
  {
    printf("平局\n");
  }
}
void test()
{
  int input = 0;
  srand((unsigned)time(NULL));
  menu();
  do
  {
    printf("请选择:\n");
    scanf("%d", &input);
    switch (input)
    {
    case 1:
      printf("开始游戏\n");
      game();
      break;
    case 0:
      printf("退出游戏\n");
      break;
    default:
      printf("输入错误,请重新选择\n");
      break;
    }
  } while (input);
}
int main()
{
  test();
  return 0;
}


game.h:


#pragma once
#define ROW 3
#define COL 3
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//初始化棋盘声明
void InitBoard(char Board[ROW][COL], int row, int col);
//打印棋盘声明
void DisplayBoard(char Board[ROW][COL], int row, int col);
//玩家下棋声明
void Player_move(char Board[ROW][COL], int row, int col);
//电脑下棋声明
void Computer_move(char Board[ROW][COL], int row, int col);
//胜利声明
char Is_win(char Board[ROW][COL], int row, int col);
//平局声明
int Is_full(char Board[ROW][COL], int row, int col);

game.c:


#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void InitBoard(char Board[ROW][COL], int row, int col)
{
  int i = 0;
  int j = 0;
  for (i = 0; i < row; i++)
  {
    for (j = 0; j < col; j++)
    {
      Board[i][j] = ' ';
    }
  }
}
void DisplayBoard(char Board[ROW][COL], int row, int col)
{
  int i = 0;
  int j = 0;
  for (i = 0; i < ROW; i++)
  {
    //打印行
    for (j = 0; j < COL; j++)
    {
      printf(" %c ", Board[i][j]);
      if (j < COL - 1)
        printf("|");
    }
    printf("\n");
    //打印列
    for (j = 0; j < COL; j++)
    {
      printf("---");
      if (j < COL - 1)
        printf("|");
    }
    printf("\n");
  }
}
void Player_move(char Board[ROW][COL], int row, int col)
{
  int x = 0;
  int y = 0;
  while (1)
  {
    scanf("%d %d", &x, &y);
    if (x >= 1 && x <= row && y >= 1 && y <= col)
    {
      if (Board[x - 1][y - 1] == ' ')
      {
        Board[x - 1][y - 1] = '*';
        break;
      }
      else
      {
        printf("输过啦!!!\n");
      }
    }
    else
    {
      printf("输出去啦!!!!\n请重新输入:\n");
    }
  }
}
void Computer_move(char Board[ROW][COL], int row, int col)
{
  while (1)
  {
    int x = rand() % ROW;
    int y = rand() % COL;
    if (Board[x][y] == ' ')
    {
      Board[x][y] = '#';
      break;
    }
  }
}
int Is_full(char board[ROW][COL], int row, int col)
{
  int i = 0;
  int j = 0;
  for (i = 0; i < row; i++)
  {
    for (j = 0; j < col; j++)
    {
      if (board[i][j] == ' ')
      {
        return 0;
      }
    }
  }
  return 1;
}
//玩家赢返回 *
//电脑赢返回 #
//平局  返回 Q
//继续  返回 C
char Is_win(char Board[ROW][COL], int row, int col)
{
  int i = 0;
  //三行
  for (i = 0; i < row; i++)
  {
    if (Board[i][0] == Board[i][1] && Board[i][1] == Board[i][2] && Board[i][1] != ' ')
    {
      return Board[i][1];
    }
  }
  //三列
  for (i = 0; i < col; i++)
  {
    if (Board[0][i] == Board[1][i] && Board[1][i] == Board[2][i] && Board[1][i] != ' ')
    {
      return Board[1][i];
    }
  }
  //对角线的判断
  if (Board[0][0] == Board[1][1] && Board[1][1] == Board[2][2] && Board[1][1] != ' ')
  {
    return Board[1][1];
  }
  if (Board[0][2] == Board[1][1] && Board[1][1] == Board[2][0] && Board[1][1] != ' ')
  {
    return Board[1][1];
  }
  //判断平局
  if (1 == Is_full(Board, row, col))
  {
    return 'Q';
  }
  //继续
  return 'C';
}

2.5三子棋的扩展

大家可以发现,目前我们的电脑走时是靠随机数的生成,所以电脑就表现得十分笨拙,所以我们可以自己去思考一下,比如如果电脑发现自己有两个连在一起了,就直接放在第三个取得胜利,有还有如果发现玩家要连在一起了,就去阻断玩家等。这是个思考题哈!

相关文章
|
7天前
|
C语言
C语言实现2048小游戏---粤嵌GE6818嵌入式系统实训
C语言实现2048小游戏---粤嵌GE6818嵌入式系统实训
20 0
|
23小时前
|
存储 定位技术 API
C语言实战 -- 经典贪吃蛇游戏(含完整源码)
C语言实战 -- 经典贪吃蛇游戏(含完整源码)
5 1
|
1天前
|
C语言
C语言小游戏的源代码
C语言小游戏的源代码
|
1天前
|
存储 C语言
C语言实战——扫雷游戏
C语言实战——扫雷游戏
5 0
|
1天前
|
算法 编译器 C语言
【C语言】:详解随机数的生成和猜数字游戏的实现
【C语言】:详解随机数的生成和猜数字游戏的实现
6 0
|
1天前
|
C语言
扫雷游戏(C语言基础版)
扫雷游戏(C语言基础版)
2 0
|
3天前
|
C语言
·扫雷游戏(C语言版)
·扫雷游戏(C语言版)
|
3天前
|
存储 C语言
C语言---扫雷游戏的实现
C语言---扫雷游戏的实现
|
4天前
|
C语言
C语言------猜数字游戏----有次数限制版
C语言------猜数字游戏----有次数限制版
|
4天前
|
C语言
C语言----猜数字游戏
C语言----猜数字游戏
14 0