说在前面:上一篇博客发布之后获得很多关注,但是我感觉还是不太好,所以打磨了几天,放出了这个PLUS版本(本人期末周,还不是计算机专业的,所以这么慢,大家见谅)。这次修改主要优化了布局还加了一些彩蛋,我先介绍一下,源码在后面会全部放给大家。
——————修改
1 .修改了颜色,可以自我选择喜欢的数字而确定要什么颜色(注意,不要大于65535哦)
一般来说,选择的数字不同,之后主色调会不同,像这样
2 .相信大家都很烦,这么多行,这么多列,下在哪,根本看不清好吧,所以,我在每一行每一列都标上了序号,这样,就可以很快找到下棋地方了
其他彩蛋可以自己试试,如果你是大佬也可以自己找源代码
(下棋的颜色也不同)
——————————源代码(强调)
主函数
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>
#include <windows.h>
#include "game.h"
int main()
{
int y = 0;
int x = 0;
int z = 0;
int choice = 0;
while (1)
{
//准备开始游戏
y=game_begin();
if (0 ==y )break;
else if ( 1==y )
{
while (1)
{
//棋盘初始化
board_init();
color(COLOR % 15 + 1);
printf("请选择玩家数量:> ");
scanf("%d", &num);
color(16);
printf("\n");
if (1 < num)
{
break;
}
else
{
color(COLOR % 15 + 1);
printf("你干嘛,哎呦,玩家请别瞎闹\n");
Sleep(2000);
system("cls");
color(16);
return 0;
}
}
//起始玩家数量输入,赋值num
//玩家开始玩
x=gaming();
color(COLOR % 15 + 1);
printf("!!!!!!!!! WINNER:Player %d !!!!!!!!\n",x);
printf("********* GAME OVER ********\n");
Sleep(2000);
system("cls");
printf("是否再来一局:>(1代表是;0代表否)\n");
printf("选择:");
scanf("%d", &choice);
/*getchar();*/
if ( 0==choice )
break;
else
{
printf("请稍等片刻,游戏加载中\n");
Sleep(1000);
system("cls");
}
color(16);
}
else
{
game_error();
}
}
return 0;
}
game.h
#include <stdio.h>
#ifndef _GAME__H_
#define _GAME__H_
extern int num ;
extern unsigned int COLOR;
void color(int x);
int game_begin();
void board_init();
int gaming();
void game_error();
#endif
game.c
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#define COL 14
#define LIN 14
#define NUM 5
int num = 0;
unsigned int COLOR = 0;
int game_board[LIN + NUM][COL + NUM] = { 0 };
void color(short x)
{
if (x >= 0 && x <= 15)
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);
else
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}
int game_begin()
{
int choose = 0;
int i = COL;
int j = LIN;
int n = NUM;
color(11);
printf("****************************** \n");
printf(" 玩家准备游戏 \n");
color(3);
printf("本棋盘有%d行,有%d列,是%d子棋\n", j, i,n);
color(11);
printf("****************************** \n");
printf("**********输入你的选择******** \n");
printf("****1:开始游戏****0:离开***** \n");
printf("选择:");
scanf("%d", &choose);
while (1)
{
Sleep(200);
system("cls");
printf("请选择本局幸运数字:");
while (getchar() != '\n');
scanf("%d", &COLOR);
if (COLOR < 65535)
{
break;
}
else
{
COLOR = 0;
}
}
color(16);
return choose;
}
void board_init()
{
int a = 0;
int b = 0;
color(COLOR%15+1);
for (a = 0; a < LIN + NUM; a++)
{
for (b = 0; b < COL + NUM; b++)
{
game_board[a][b] = 0;
}
}
int j = 0;
for (j = 0; j < LIN; j++)
{
int i = 0;
for (i = 0; i < COL; i++)
{
printf(" ");
if (i < COL - 1)
printf("|");
if ( COL - 1== i)
printf(" 第%d行\n",j+1);
}
if (j < LIN - 1)
{
for (i = 0; i < COL; i++)
{
printf("...");
if (i < COL - 1)
printf("|");
if ( i ==COL - 1)
printf("\n");
}
}
}
printf("\n");
for (b = 1; b < COL + 1; b++)
{
if (b)
{
if (b < 10)
{
printf(" %d ", b);
}
else if (b < 100)
{
printf(" %d ", b);
}
else if (b < 1000)
{
printf("%d ", b);
}
else
{
printf("你玩呢\n");
Sleep(2200);
system("cls");
return 0;
}
}
}
printf("\n");
color(16);
}
void game_play(int n)
{
int i = 0;
int j = 0;
int a = 0;
int b = 0;
while (1)
{
color(COLOR % 15 + 1);
while (1)
{
printf("玩家%d请下棋:>", n);
while (getchar() != '\n');
scanf("%d %d", &i, &j);
if (i >= 1 && j >= 1)
{
break;
}
else
{
*(&i) = 0;
*(&j) = 0;
}
}
if (game_board[i - 1][j - 1] != 0)
{
printf("请玩家%d重新输入,目前输入已被占用\n", n);
}
else
{
if (i < LIN + 1 && j < COL + 1)
{
game_board[i - 1][j - 1] = n;
break;
}
else
{
printf("请输入合法格式\n");
}
}
}
color(16);
}
void game_play_low()
{
int i = 0;
int j = 0;
int a = 0;
int b = 0;
while (1)
{
printf("\n");
printf("\n");
if (i < LIN + 1 && j < COL + 1)
{
for (a = 0; a < LIN; a++)
{
for (b = 0; b < COL; b++)
{
if (game_board[a][b])
{
if (game_board[a][b] < 10)
{
color((COLOR+game_board[a][b]) % 15 + 1);
printf(" %d ", game_board[a][b]);
color(16);
}
else if (game_board[a][b] < 100)
{
color((COLOR + game_board[a][b]) % 15 + 1);
printf(" %d", game_board[a][b]);
color(16);
}
else if (game_board[a][b] < 1000)
{
color((COLOR + game_board[a][b]) % 15 + 1);
printf("%d", game_board[a][b]);
color(16);
}
else
{
printf("你玩呢\n");
Sleep(2200);
system("cls");
return 0;
}
}
else printf(" ");
color(COLOR % 15 + 1);
if (b < COL - 1)
printf("|");
if (COL - 1 == b)
{
printf(" 第%d行\n", a + 1);
}
color(16);
}
if (a < LIN - 1)
{
color(COLOR % 15 + 1);
for (b = 0; b < COL; b++)
{
printf("...");
if (b < COL - 1)
printf("|");
if (COL - 1 == b)
printf("\n");
}
color(16);
}
}
break;
}
}
printf("\n");
color(COLOR % 15 + 1);
for (b = 1; b < COL + 1; b++)
{
if (b)
{
if (b < 10)
{
printf(" %d ", b);
}
else if (b < 100)
{
printf(" %d ", b);
}
else if (b < 1000)
{
printf("%d ", b);
}
else
{
printf("你玩呢\n");
Sleep(2200);
system("cls");
return 0;
}
}
}
color(16);
printf("\n");
}
//返回值是胜利者
int game_who_win()
{
int i = 0;
int a = 0;
int b = 0;
int c = 0;
int winner = 0;
for (i = 1; i <= num; i++)
{
for (a = 0; a < LIN; a++)
{
for (b = 0; b < COL; b++)
{
int low = 0;
int high = 0;
int line = 0;
int column = 0;
for (c = 1; c <= NUM; c++)
{
if (game_board[a][b] == i)
{
if (game_board[a + c][b + c] == i)low++;
if (game_board[a + c][b - c] == i)high++;
if (game_board[a + 0][b + c] == i)line++;
if (game_board[a + c][b + 0] == i)column++;
}
}
if ( NUM == low + 1|| NUM == high + 1 || NUM == line + 1 || NUM== column + 1)
{
winner = i;
break;
}
}
if (winner)
{
break;
}
}
if (winner)
{
break;
}
}
return winner;
}
//返回值为胜利者序号,不然返回0
int game_if_win()
{
int i = 0;
int m = 0;
for (i = 0; i < num; i++)
{
m = game_who_win();
if (m)
{
break;
}
}
return m;
}
int gaming()
{
int i = 0;
int j = 0;
while (1)
{
for (i = 1; i <= num; i++)
{
system("cls");
game_play_low();
game_play(i);
j = game_if_win();
if (j)
break;//如果发现返回值不为0,代表有胜利者,结束死循环
}
if (j)
break;
}
return j;
}
void game_error()
{
color(COLOR % 15 + 1);
printf("请重新选择\n");
color(16);
}
最后,谢谢大家的支持,本人机械大一,学习c主要为了单片机嵌入式和开发自己小游戏