课设:五子棋游戏设计系统(C语言)

        很多人大一或大二期末的时候需要做课程设计,这时候为了节省时间与精力,可以看一下我的课程设计做一个参考噢,如果需要我帮忙整理课程设计报告请私聊我哈哈哈哈哈!接下来开始进入主题!

题目:五子棋游戏设计系统(难度系数***)

功能要求:

在一个方阵上通过两人对弈的形式,依次在棋盘上放置两种颜色的棋子,哪一方先让五个棋子形成一条直线(包括横、竖、对角线3个方向),即为获胜,本程序实现用键盘控制的五子棋游戏。游戏初始运行界面应为如下:

(1)游戏操作规则:

(2)按左右上下方向键移动棋子

(3)按空格键确定落棋子

(4)禁止在棋盘外按空格

(5)你是否接受上述的游戏规则(Y/N)如果输入Y,才可以进行游戏,进入正式的游戏界面,要绘制五子棋的棋盘,设置棋子颜色。

#include
#include  // 使用system("cls")函数需要的头文件 
#include   //使用 _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、可以增加悔棋模块

                感兴趣的同学可以私聊我哈!

注: 课程设计这个科目用到了平常上课没学过的东西也是正常,鼓励大家多查阅相关资料并整理,让这些知识成为自己的!!!

        以上内容给有需要帮助的同学,另外,本人也是在读大学生,欢迎各位一起指正与修改!

你可能感兴趣的:(c语言,游戏)