很多人大一或大二期末的时候需要做课程设计,这时候为了节省时间与精力,可以看一下我的课程设计做一个参考噢,如果需要我帮忙整理课程设计报告请私聊我哈哈哈哈哈!接下来开始进入主题!
题目:五子棋游戏设计系统(难度系数***)
功能要求:
在一个方阵上通过两人对弈的形式,依次在棋盘上放置两种颜色的棋子,哪一方先让五个棋子形成一条直线(包括横、竖、对角线3个方向),即为获胜,本程序实现用键盘控制的五子棋游戏。游戏初始运行界面应为如下:
(1)游戏操作规则:
(2)按左右上下方向键移动棋子
(3)按空格键确定落棋子
(4)禁止在棋盘外按空格
(5)你是否接受上述的游戏规则(Y/N)如果输入Y,才可以进行游戏,进入正式的游戏界面,要绘制五子棋的棋盘,设置棋子颜色。
#include<stdio.h>
#include<stdlib.h> // 使用system("cls")函数需要的头文件
#include<conio.h> //使用 _getch()函数中需要的头文件
void drawing(); //打印出各个棋盘的状态
void getmove(); //使用方向键来模拟棋盘中棋子的移动
int judgement(); //总判断
int judgement1(); //横方向
int judgement2(); //竖方向
int judgement3(); //左斜方向
int judgement4(); //右斜方向
int chess[15][16];
int ch1, ch2;
int player = 0;
int main()
{
if(0)
{
restart:
system("cls"); //清屏功能
getchar(); //将空格吞掉
}
for (int i = 0; i < 15; i++) //给棋盘位置赋值,便于 void drawing()函数执行
for (int j = 0; j < 16; j++)
chess[i][j] = 0;
for (int i = 0; i < 15; i++)
chess[i][15] = 3;
chess[7][15] = -1;
printf("在一个方阵上通过两人对弈的形式,依次在棋盘上放置两种颜色的棋子\n,哪一方先让五个棋子形成一条直线(包括横、竖、对角线3个方向),即为获胜\n,本程序实现用键盘控制的五子棋游戏。\n游戏操作规则:\n(1)按左右上下方向键移动棋子\n(2)按空格键确定落棋子\n(3)禁止在棋盘外按空格\n(4)你是否接受上述的游戏规则(Y / N)如果输入Y,才可以进行游戏\n");
int x;
char t;
scanf("%c", &t);
if (t == 'Y')
{
drawing();
while (1)
{
getmove();
chess[7][15] = 3;
if (ch1 == ' ')
chess[7][15] = -1;
drawing();
if (judgement() == 1)
{
printf("P%d玩家获胜!\n", ((player + 1) % 2) + 1);
printf("输入0结束游戏,输入1再来一把: ");
scanf("%d",&x);
if(x==1) goto restart;
else if(x==0) return 0;
}
}
}
}
void drawing()
{
system("cls");
printf("在一个方阵上通过两人对弈的形式,依次在棋盘上放置两种颜色的棋子\n,哪一方先让五个棋子形成一条直线(包括横、竖、对角线3个方向),即为获胜\n,本程序实现用键盘控制的五子棋游戏。\n游戏操作规则:\n(1)按左右上下方向键移动棋子\n(2)按空格键确定落棋子\n(3)禁止在棋盘外按空格\n(4)你是否接受上述的游戏规则(Y / N)如果输入Y,才可以进行游戏\n");
printf("P1玩家为●\nP2玩家为○\n⊕为棋子要下的位置\n");
printf("现在由P%d玩家行动\n", (player % 2)+1);
for (int row = 0; row < 15; row++)
{
for (int list = 0; list < 16; list++)
{
if (chess[row][list] == 0)
{
if (row != 0 && row != 14 && list != 0 && list != 14)
printf("╋");
else if (row == 0 && list == 0)
printf("┏");
else if (row == 0 && list == 14)
printf("┓");
else if (row == 14 && list == 0)
printf("┗");
else if (row == 14 && list == 14)
printf("┛");
else if (row == 0)
printf("┳");
else if (row == 14)
printf("┻");
else if (list == 0)
printf("┣");
else if (list == 14)
printf("┫");
if (list != 14)
printf("┉");
}
else
{
if (chess[row][list] == 1)
printf("●");
else if (chess[row][list] == 2)
printf("○");
else if (chess[row][list] == -1)
printf("⊕");
}
}
printf("\n");
}
}
int row1 = 7, list1 = 15;
int row2 , list2;
int board = 0, state = 0;
void getmove()
{
board = state;
re_getch:
ch1 = _getch();
if (ch1 != ' ' && ch1 != 224)
{
printf("请使用方向键移动棋子和空格确定下棋位置\n");
goto re_getch;
}
if (ch1 == ' ' && row1 == 7 && list1 == 15)
{
printf("禁止在棋盘外按空格!");
goto re_getch;
}
if( ch1 == ' ')
{
row2=row1;
list2=list1;
}
if (ch1 == ' ' && board != 0)
{
printf("该位置存在棋子!");
goto re_getch;
}
else if (ch1 == ' ' && board == 0)
{
if (player % 2== 0)
chess[row1][list1] = 2;
else
chess[row1][list1] = 1;
row1 = 7; //下完棋子后重新回到初始位置
list1 = 15;
player++;
}
else //就是ch1的值为方向键的时候,激活ch2!
{
ch2 = _getch();
if (row1==0&&ch2==72)
{
printf("不能在棋盘外下棋!请重新输入!");
goto re_getch;
}
if (row1 == 14 && ch2 == 80)
{
printf("不能在棋盘外下棋!请重新输入!");
goto re_getch;
}
if (list1 == 0 && ch2 == 75)
{
printf("不能在棋盘外下棋!请重新输入!");
goto re_getch;
}
if (list1 == 14 && ch2 == 77)
{
printf("不能在棋盘外下棋!请重新输入!");
goto re_getch;
}
if(row1 == 7 && list1 == 15)
{
switch (ch2)
{
case 75:
state = chess[row1][list1 - 1];
chess[row1][list1 - 1] = chess[row1][list1];
chess[row1][list1] = board;
list1 = list1 - 1;
break;
default :
printf("无效输入!");
goto re_getch;
}
}
else
{
switch (ch2)
{
case 72:
state = chess[row1 - 1][list1];
chess[row1 - 1][list1] = chess[row1][list1];
chess[row1][list1] = board;
row1 = row1 - 1;
break;
case 80:
state = chess[row1 + 1][list1];
chess[row1 + 1][list1] = chess[row1][list1];
chess[row1][list1] = board;
row1 = row1 + 1;
break;
case 75:
state = chess[row1][list1 - 1];
chess[row1][list1 - 1] = chess[row1][list1];
chess[row1][list1] = board;
list1 = list1 - 1;
break;
case 77:
state = chess[row1][list1 + 1];
chess[row1][list1 + 1] = chess[row1][list1];
chess[row1][list1] = board;
list1 = list1 + 1;
break;
}
}
}
}
int judgement()
{
if(ch1 != 224 && list2 !=15)
{
if (judgement1() == 1 || judgement2() == 1 || judgement3() == 1 || judgement4() == 1)
return 1;
}
return 0;
}
int judgement1()
{
int n=1;
for(int i=0;i < 14;i++)
if(chess[row2][i]!=0 && (chess[row2][i]==chess[row2][i+1]))
n++;
if(n>=5) return 1;
return 0;
}
int judgement2()
{
int n=1;
for(int i=0;i < 14;i++)
if((chess[i][list2]!=0) && (chess[i][list2]==chess[i+1][list2]))
n++;
if(n>=5) return 1;
return 0;
}
int judgement3()
{
int n=0;
for(int i=0;row2 - i >= 0,list2 - i >=0;i++)
{
if(chess[row2-i][list2-i]==chess[row2][list2])
n++;
else break;
}
for(int i=1;row2 + i <= 14,list2 + i <=14;i++)
{
if(chess[row2+i][list2+i]==chess[row2][list2])
n++;
else break;
}
if(n>=5) return 1;
return 0;
}
int judgement4()
{
int n=0;
for(int i=0;row2 + i >= 0,list2 - i >=0; i++)
{
if(chess[row2 + i][list2 - i]==chess[row2][list2])
n++;
else break;
}
for(int i=1;row2 - i <= 14,list2 + i <=14;i++)
{
if(chess[row2-i][list2+i]==chess[row2][list2])
n++;
else break;
}
if(n>=5) return 1;
return 0;
}
以上代码足以在C语言课程设计这个科目中获得较高的分数,如果基础稍微薄弱的同学理解不了可以私聊我哈!
如果还想在此科目获得接近满分的成绩,也可以私聊我噢!
那么怎样才能使成绩提高呢?在题目原有的基础上拓展功能。
e.g. 1、使编译运行后五子棋游戏界面不闪屏
2、可以增加悔棋模块
感兴趣的同学可以私聊我哈!
注: 课程设计这个科目用到了平常上课没学过的东西也是正常,鼓励大家多查阅相关资料并整理,让这些知识成为自己的!!!
以上内容给有需要帮助的同学,另外,本人也是在读大学生,欢迎各位一起指正与修改!