精华内容
下载资源
问答
  • easyx游戏编程:五子棋(C语言游戏开发) 五子棋: 本游戏用到了图形界面库graphics.h,图形界面库下载安装: 下载链接: https://easyx.cn/downloads/. 下方有源码。 功能实现: 玩家对战,人机对战,音乐播放,重开...

    easyx游戏编程:五子棋(C语言游戏开发)

    五子棋:

    本游戏用到了图形界面库graphics.h,图形界面库下载安装:

    下载链接: https://easyx.cn/downloads/.
    下方有源码。

    功能实现:

    玩家对战,人机对战,音乐播放,重开,悔棋,投降等。
    在这里插入图片描述
    所以要完成上面的功能,我们要:

    • 欢迎界面和游戏界面
    • 游戏场景绘制(棋盘绘画)
    • 玩家操作
    • 游戏功能(重开,悔棋等)
    • 对战模式(人机和双人)
    • AI算法

    具体实现:

    界面:

    我们先设置窗口背景颜色,清理画布,然后设置文字颜色,设置窗口透明,设置文字大小,字体与内容
    欢迎界面:

    void hello() 
    {
    	initgraph(800, 600);    	//设置窗口大小
    	setbkcolor(WHITE);		//设置背景为白色
    	cleardevice();			//清理画布
    
    	mciSendString(TEXT(" open 音乐.mp3 alias mysong"), NULL, 0, NULL);	//选择音乐
    	mciSendString(TEXT("play mysong"), NULL, 0, NULL);			//播放音乐
    }
    

    游戏界面:

     initgraph(600, 800);
     cleardevice();
     settextcolor(RED);     			//设置文字颜色
     setbkmode(TRANSPARENT);    			//设置窗口透明
     settextstyle(128, 0, "宋体");  			//设置字体大小、宽度、字体
     outtextxy(100, 100, "五子棋");
     setlinecolor(RED);
     rectangle(150, 300, 450, 650);
     rectangle(160, 310, 440, 640);
     line(160, 420, 440, 420);
     line(160, 530, 440, 530);
     settextstyle(65, 0, "华文琥珀");
     outtextxy(170, 340, "人机大战");
     outtextxy(170, 450, "双人对战");
     outtextxy(170, 560, "联系作者");
     setlinecolor(WHITE);
     settextcolor(WHITE);
     settextstyle(23, 0, "华文琥珀");
     outtextxy(527, 37, "音乐");
     circle(550, 50, 25);
    

    棋盘:

    绘画出棋盘
    棋盘绘制:

    void board()
    {
    initgraph(1200, 800);			//设置窗口大小
    setbkcolor(BLACK);
    cleardevice();
    setlinecolor(WHITE);
    for (int i = 50; i <= 750; i += 50)	//使用for循环绘制棋盘
    {
     	line(i, 50, i, 750);
      	line(50, i, 750, i);
    }
    for (int i = 200; i < 800; i += 400)
    {
     	for (int j = 200; j < 800; j += 400)
    	 fillcircle(i, j, 5);
    }
    }
    

    棋子绘制:

    setrop2(R2_COPYPEN); 		//二元光栅操作码:R2_COPYPEN当前颜色
    setfillcolor(RED);		//红方棋子
    fillcircle(m.x, m.y, 20);
    setfillcolor(WHITE);		//白方棋子
    fillcircle(m.x, m.y, 20);
    

    玩家操作:

    定义鼠标,使用鼠标来模拟落子操作

    MOUSEMSG m; 			// 定义鼠标消息
    m = GetMouseMsg();		//获取鼠标消息
    if (m.uMsg == WM_LBUTTONDOWN)   // 使用鼠标左键进行操作
    {
    	int x,y;
    	if (x >= 25)			//锁定鼠标,使落子在棋盘中心
      		m.x = m.x - x + 50;
      	else
      	 	m.x = m.x - x;
       	if (y >= 25)
      		m.y = m.y - y + 50;
      	else
      	  	m.y = m.y - y;
    
    }
    

    游戏功能:

    重开:
    即重绘棋盘,调用绘画棋盘函数board()即可。
    悔棋:
    使用数组定义落子位置,记录每次上次落子的位置,重新绘制即可。

    	int red[15][15],white[15][15],stick[15][15];		//设置红方落子,白方落子以及该位置是否落子
    	board();
    

    投降:
    判断现在是哪一方落子,点击投降即该方落败。
    音乐播放/暂停:

    int cont=0if (cont % 2 == 0)
        {
         mciSendString(TEXT("pause mysong"), NULL, 0, NULL);
         cont++;		//暂停音乐
        }
        else
        {
         mciSendString(TEXT("resume mysong"), NULL, 0, NULL);
         cont++;		//播放音乐
        }
    

    胜利判断:
    因为开始使用数组进行标记,由返回值判断五子是否连成一线。

    int success(int x[15][15])
    {
     int m, n;
     for (m = 0; m < 15; m++)
     {
      for (n = 0; n < 15; n++)
      {
       if (x[m][n] == 1 && x[m][n + 1] == 1 && x[m][n + 2] == 1 && x[m][n + 3] == 1 && x[m][n + 4] == 1)return 1;
       if (x[m][n] == 1 && x[m + 1][n] == 1 && x[m + 2][n] == 1 && x[m + 3][n] == 1 && x[m + 4][n] == 1)return 1;
       if (x[m][n] == 1 && x[m + 1][n + 1] == 1 && x[m + 2][n + 2] == 1 && x[m + 3][n + 3] == 1 && x[m + 4][n + 4] == 1)return 1;
       if (n > 3 && x[m][n] == 1 && x[m + 1][n - 1] == 1 && x[m + 2][n - 2] == 1 && x[m + 3][n - 3] == 1 && x[m + 4][n - 4] == 1)return 1;
      }
     }
     return 0;
    }
    
    

    人机算法:

    我这个AI的算法只是比较简单的,或者说是呆,如果大家想写一些NB一点的,对五子棋感兴趣的可以使用权值判断来编写人机代码。

    图片部分可自行获取

    在这里插入图片描述

    源码

    展开全文
  • C语言游戏开发 1.1 弹跳的小球 1.1.1 显示静止的小球 代码为: #include <stdio.h> int main(void) { int i,j; int x = 5; //x表示纵坐标 int y = 10; //y表示横坐标 //输出上面的空行 for(i=0; i<x...

    C语言游戏开发

    1.1 弹跳的小球

    1.1.1 显示静止的小球

    代码为:

    #include <stdio.h>
    
    int main(void)
    {
    	int i,j;
    	int x = 5;  //x表示纵坐标
    	int y = 10; //y表示横坐标
    	
    //输出上面的空行
    	for(i=0; i<x; i++)
    		printf("\n");
    //输出小球左边的空格
    	for(j=0; j<y; j++)
    		printf(" ");
    	printf("o");	//输出小球
    	printf("\n");
    	
    	return 0;	
    } 
    

    结果为:
    在这里插入图片描述
    1.1.2 小球下落

    代码为:

    #include <stdio.h>
    #include <stdlib.h>  //包含清屏函数system("cls")
    
    int main(void)
    {
    	int i,j;
    	int x = 1;
    	int y = 10;
    	for(x=1; x<10; x++)
    	{
    		system("cls");  //清屏函数
    	//输出小球上面的空行
    		for(i=0; i<x; i++)
    			printf("\n");
    	//输出小球左边的空格
    		for(j=0; j<y; j++)
    			printf(" ");
    		printf("o");   	//输出小球o 
    		printf("\n"); 
    	}
    	
    	return 0;
     } 
    

    结果为: 小球直线动态下落

    1.1.3上下弹跳的小球

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
    	int i,j;
    	int x = 5;
    	int y = 10;
    	
    	int height = 20;
    	int velocity = 1; 		//velocity用来记录速度 
    	
    	while(1)
    	{
    		x = x + velocity;    //小球的新位置x = 旧位置x + 速度velocity
    		system("cls");		//清屏函数 
    		
    	//输出小球前的空行
    		for(i=0; i<x; i++)
    			printf("\n");
    		for(j=0; j<y; j++)
    			printf(" ");
    		printf("o");
    		printf("\n");
    	
    	//当小球到达上、下边界时改变方向,即改变velocity的正负
    		if(x == height)	
    			velocity = -velocity;
    		if(x == 0)
    			velocity = -velocity; 
    	}
    	
    	return 0;
     } 
    

    结果为:小球o上下来回移动

    1.1.4斜着弹跳的小球

    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>  //通过使用Sleep函数控制小球的弹跳速度
     
    int main(void)
    {
    	int i,j;
    	int x = 0;
    	int y = 5;
    	
    	int velocity_x = 1;		//控制x方向的速度变量
    	int velocity_y = 1;		//控制y方向的速度变量
    	int left = 0;
    	int right = 20;
    	int top = 0;
    	int bottom = 10; 
    	
    	while(1)
    	{
    		x = x + velocity_x;
    		y = y + velocity_y;
    		
    		system("cls");		//清屏函数 
    		
    	//输出小球前的空行
    		for(i=0; i<x; i++)
    			printf("\n");
    		for(j=0; j<y; j++)
    			printf(" ");
    		printf("o");
    		printf("\n");
    		Sleep(50);		//在输出图形后等待50ms 
    		
    	//velocity_x碰到上、下边界后改变正负号
    		if((x == top)||(x == bottom))
    			velocity_x = -velocity_x;
    			
    	//velocity_y碰到左、右边界后改变正负号
    		if((y == left)||(y==right))
    			velocity_y = -velocity_y; 
    	}
    	
    	return 0;
     } 
    

    结果为:小球在规定的区域内来回弹跳

    展开全文
  • 7个常c语言游戏开发源码(含分析报告),想学习C语言的可下载下来研究
  • #C语言游戏开发的学习第一天 今天我在网上找到了C语言学习的一些学习资料,记录一下 打飞机游戏设计 通过scanf函数获取用户的输入来控制小飞机的上下左右,但是会有一个弊端,就是每次输入都必须按下回车键才能执行...

    第一次使用CSDN记录学习过程

    学习过程中经常不知道笔记会放在哪里,放网盘有时候编辑起来不是太方便,所以记录一下使用CSDN博客来记录学习过程以及学习笔记,一起与大佬们学习分享。

    #C语言游戏开发的学习第一天
    今天我在网上找到了C语言学习的一些学习资料,记录一下

    打飞机游戏设计

    通过scanf函数获取用户的输入来控制小飞机的上下左右,但是会有一个弊端,就是每次输入都必须按下回车键才能执行,不能很好的做到人机交互。所以要用到(#include <conio.h>)里的getch函数,直接获取用户输入的东西。kbhit()函数在用户有键盘输入时返回1,否则返回0;if (kbhit())作用是避免在用户不输入的时候导致游戏暂停。
    用的是scanf函数。

    #include <stdio.h>
    #include <stdlib.h>
    int main(){
    	int x = 5;
    	int y = 10;
    	int i,j;
    	char input;
    	
    	while(1){
    		system("cls");	//刷新界面
    		for(i=0;i<x;i++)	//输出飞机上的空格 
    			printf("\n");
    		for(j=0;j<y;j++)	//输出飞机左边的空格 
    			printf(" "); 
    		printf("*");	//输出飞机 
    		printf("\n"); 
    		
    		scanf("%c",&input);
    		if(input == 'a')
    			y--;
    		if(input == 'd')
    			y++;
    		if(input == 'w')
    			x--;
    		if(input == 's')
    			x++;
    	}
    	return 0;
    } 
    

    用的是getch函数:

    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    int main(){
    	int x = 5;
    	int y = 10;
    	int i,j;
    	char input;
    	
    	while(1){
    		system("cls");	//刷新界面
    		for(i=0;i<x;i++)	//输出飞机上的空格 
    			printf("\n");
    		for(j=0;j<y;j++)	//输出飞机左边的空格 
    			printf(" "); 
    		printf("*");	//输出飞机 
    		printf("\n"); 
    		
    		if(kbhit()){		//判断是否有输入
    		input = getch(); 
    		if(input == 'a')
    			y--;
    		if(input == 'd')
    			y++;
    		if(input == 'w')
    			x--;
    		if(input == 's')
    			x++;
    	}}
    	return 0;
    } 
    

    这样就能很好的实现人机交互,不需要每移动一下就按一次回车才有反应。

    展开全文
  • C语言游戏开发SDL篇

    千次阅读 2018-10-26 13:51:46
    在 CSDN 博客发现一些分享的好文章,但暂时不懂如何收藏,先写文章将这些网址收录,目后随时方便...allegro 游戏开发     ============================================================      
    展开全文
  • easyx游戏编程:五子棋(C语言游戏开发)源码 源码介绍 我的编程环境是vs2019 #include "stdafx.h"是自带的,其他版本可能需要添加#include “stdafx.h” 除了下面代码外,无其他改动 #include #include #include #...
  • 基于C语言游戏开发的动态画面往往是不断的刷新显示区来实现的,即不断地输入和清空。因为计算机的计算速度很快,所以在画面较小的情况下我不会觉得有闪屏或不流畅的体验。 但一旦要刷新的画面较大,是会闪瞎开发者...
  • 文本版的贪吃蛇用的东西也并不是很多,游戏的实现主要是对一个二维数组按一定逻辑进行修改、变换(实际操作时,为了减少闪烁,我用的是字符串)。这里不对编写过程进行赘述,主要说一下最基本功能的逻辑、和一些之前...
  • #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<windows.h> int high,width; int position_x,position_y; int bullet_x,bullet_y; int enemy_x,enemy_y;...voi...
  • 球球大作战: 前言: 本游戏用到了图形界面库graphics.h,图形界面库下载安装:https://blog.csdn.net/alzzw/article/details/100043681 下方有源码。... 游戏场景绘制(地图的大小,边界等)...
  • 生命游戏也算比较古老的游戏,但是其中涉及到的编程思维还是很值得借鉴的,尤其是用来动画演示具体条件下的某群体动态变化,也可以比较粗略的描绘群体中疫情的传播与蔓延 游戏的初始化 生命游戏里,每个小格子里生命...
  • #include<stdio.h> #include<windows.h> #include<stdlib.h> #include<conio.h> int high,width; int ball_x,ball_y; int ball_vx,ball_vy;...int position_x,positio...
  • 推箱子 用win32创造一个空项目@卫聚聚 来玩推箱子吧哈哈; 推箱子代码如下 ​ #include&lt;stdio.h&gt; #include &lt;windows.h&gt; #include &...using namespace std...
  • 游戏运行时在cmd窗口上右击选择“属性”(或“默认值”)命令,可以调整字体大小、字体背景颜色、窗口大小等,使游戏的显示效果更好。 退出程序 : exit(0); 或者 exit(1); 不论在哪里执行了 exit(0); 都会结束...
  • #include<stdio.h> #include<stdlib.h> #include<conio.h> int height,wide;...int position_x,position_y,iskill=0,isfire=0,position_oppo=5;...void stagedata() /*设置舞台数据*/ ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,964
精华内容 785
关键字:

c语言游戏开发

c语言 订阅