C语言——2048

【知识教程】C语言编写2048 一、游戏介绍 《2048》是较流行的一款数字游戏。原版2048首先在github上发布,原作者是Gabriele Cirulli。它是基于《1024》和《小3传奇》(Threes!)的玩法开发而成的新型数字游戏。 二、游戏规则 游戏的规则很简单,你需要控制所有方块向同一个方向运动,两个相同数字的方块撞在一起之后合并成为他们的和,每次操作之后会在空白的方格处随机生成一个2或者4(生成2的概率要大一些),最终得到一个“2048”的方块就算胜利了。 三、核心算法 1、方块移动和合并算法。 主. 阅读详情

背景

昨天给自己放了个假,除了睡觉贼无聊,然后就开始找事情做了。

搜了一下c语言新手项目,看到2048就开始做了。

 

实现过程

1. 思路

用一维数组存储数字,每次操作通过对数组数字操作实现。

 

2. 主流程:

a. 按键检测;

b. 键值处理;

c. 成绩结算;

PS:有点废话。

 

3. 各函数介绍:

按键检测在main函数里面实现;

a.按键处理

1)通过传入的按键标志位,尝试移动数字。

有效移动,则生成新数字并判断数组是否未满;

        未满,显示新数组;

        数组满,结束游戏。

无效操作,则跳过。

2)清除标志位。

b.数字移动(上下左右)

以向左移动为例:

1)备份数组(用于判断移动是否有效);

2)对相邻相等项向左合并,例如数组a第一行为“2,0,2,4”,则将a[0] = a[0] + a[2],将a[2]清零,再接着跳过a[0]和a[2]中间数字的比较,直接判断a[3],因为一个数字最多进行一次合并。依次类推合并其他行;

3)拷贝数组的一行;

4)将原数组清零,并把拷贝的数组中非0元素左对齐放回圆数组;

5)比较移动后数组与移动前数组是否完全相等,完全相等则为无效移动,不等则为有效移动。

c.判断数组满

1)统计数组元素0的个数,同时备份数组。

2)原数组中没有0,则对备份数组进行上下左右的移动,若均为无效移动,说明数组已满。

d.随机生成新数字并放入数组空白位置

前面提到用一维数组,就是为了这里实现方便。

1)统计【原数组】中元素为0的下标,放到一个【临时数组】中;

2)随机选择【临时数组】中的一个元素,把【以该元素为下标的原数组元素】改为随机生成的2或4。

e.显示函数

 

源代码(代码有点乱)

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
#include <time.h>

#define true 1
#define false 0

void key_deal(char * state, unsigned int * buf);
char new_buf(unsigned int * p);
void game_show(unsigned int * p);
char key_left(unsigned int * p);
char key_right(unsigned int * p);
char key_up(unsigned int * p);
char key_down(unsigned int * p);
char buf_full(unsigned int * p);

int main(void) {
	HANDLE handle_in = GetStdHandle(STD_INPUT_HANDLE);      //获得标准输入设备句柄
	INPUT_RECORD keyrec;        //定义输入事件结构体
	DWORD res;      //定义返回记录
	
	char state = 0, i;
	unsigned int buf[16] = {
		0, 0, 0, 0,
		0, 0, 0, 0,
		0, 0, 0, 0,
		0, 0, 0, 0,
	};

	srand((unsigned)time(NULL));	//以程序运行时间为随机数种子

	new_buf(buf);
	game_show(buf);

	while(state != -1) {
		//按键扫描
		ReadConsoleInput(handle_in, &keyrec, 1, &res);	//读取输入事件
                //如果当前事件是键盘事件
		if (keyrec.EventType == KEY_EVENT) {
			//当前事件是虚拟按键左方向键且当前状态是按下,不是释放
                        if (keyrec.Event.KeyEvent.wVirtualKeyCode == VK_LEFT	
				&& keyrec.Event.KeyEvent.bKeyDown == true) {
				//printf("< ");
				state = 1;
			}
                        //当前事件是虚拟按键右方向键且当前状态是按下,不是释放
			else if (keyrec.Event.KeyEvent.wVirtualKeyCode == VK_RIGHT	
				&& keyrec.Event.KeyEvent.bKeyDown == true) {
				//printf("> ");
				state = 2;
			}
                        //当前事件是虚拟按键上方向键且当前状态是按下,不是释放
			else if (keyrec.Event.KeyEvent.wVirtualKeyCode == VK_UP		
				&& keyrec.Event.KeyEvent.bKeyDown == true) {
				//printf("^ ");
				state = 3;
			}
                        //当前事件是虚拟按键下方向键且当前状态是按下,不是释放
			else if (keyrec.Event.KeyEvent.wVirtualKeyCode == VK_DOWN	
				&& keyrec.Event.KeyEvent.bKeyDown == true) {
				//printf("v ");
				state = 4;
			}
                        //当前事件是虚拟按键下 Q 键且当前状态是按下,不是释放
			else if (keyrec.Event.KeyEvent.wVirtualKeyCode == 'Q'					&& keyrec.Event.KeyEvent.bKeyDown == true) {
				//退出
				state = -1;
			}
		}

		key_deal(&state, buf);	//按键处理
    }
	for(i=0; i<16; i++) {
		if(buf[i] > buf[0])
			buf[0] = buf[i];
	}
	printf("\n您最后得分是:%d\n", buf[0]);
	printf("\n==============游戏结束==============\n\n");

	system("pause");
	return 0;
}

void key_deal(char *state, unsigned int * buf) {
	if(*state!=0 && *state!=-1) {
		char flag = 0;

		switch(*state) {
			case 1 :
				if(key_left(buf))
					flag = 1;	//左
			break;
			case 2 :
				if(key_right(buf))
					flag = 1;	//右
			break;
			case 3 :
				if(key_up(buf))
					flag = 1;	//上
			break;
			case 4 :
				if(key_down(buf))
					flag = 1;	//下
			break;
			default : printf("ERROR : 按键判断出错\n");
		}
		if(*state>0 && *state<5 && flag==0) {
			new_buf(buf);	//在空白处随机生成2或4
			system("cls");	//清屏
			game_show(buf);	//显示处理后的结果
			if(!buf_full(buf)) {	//返回值为0说明数组满了,游戏结束
				*state = -1;
				return;
			}
		}
		*state = 0;	//清除按键标志位
	}
}

//显示数组内容
void game_show(unsigned int * p) {
	char i, j;

	printf("===========【菜鸡版2048】===========\n\n");
	printf("操作说明:\n");
	printf("1. 方向键控制数字移动\n");
	printf("2. 蹲下按 Q 退出游戏\n\n");
	printf("祝您游戏愉快,遇到bug请忽略!\n\n");
	printf("====================================\n\n");
	for(i=0; i<16; i+=4) {
		printf(" |");
		for(j=i; j<i+4; j++) {
			if(p[j] != 0) {
				printf("%7d|", p[j]);
			}
			else
				printf("       |");	//7个空格
		}
		printf("\n\n");
	}
	printf("====================================\n");
}

//左方向键处理函数,为有效操作返回0,否则返回1
char key_left(unsigned int * p) {
	char i, j, n;
	unsigned int buf[4];
	unsigned int tmp[16];
	char count = 0;
	//备份数组
	for(i=0; i<16; i++)
		tmp[i] = p[i];

	for(i=0; i<16; i+=4) {
		//合并相邻的相等项
		for(j=i; j<i+4; j++) {
			for(n=1; n<(i+4)-j; n++) {
				if(p[j+n]!=0) {
					if(p[j]==p[j+n]) {
						p[j] = p[j] + p[j+n];
						p[j+n] = 0;
						j = j + n;
					break;
					}
					else
						break;
				}
			}
		}

		count = 0;
		//计算第i行有多少个0
		for(n=0; n<4; n++) {
			if(p[i+n] == 0)
				count++;
			buf[n] = p[i+n];
		}

		//如果i行不全为0
		if(count < 4) {
			//获得非零元素左对齐的数组
			for(n=0, j=i; n<4; n++) {
				if(buf[n] != 0) {
					p[i+n] = 0;		//把原数组中需要移动的元素所在位置清零
					p[j++] = buf[n];	//将非零元素左对齐
				}
			}
		}
	}

	//检查移动前移动后是否有变化,没变化说明不能移动
	for(i=0, count=0; i<16; i++)
		if(tmp[i] == p[i])
			count++;
	if(count == 16)
		return 1;
	else
		return 0;
}

//右方向键处理函数,为有效操作返回0,否则返回1
char key_right(unsigned int * p) {
	char i, j, n;
	unsigned int buf[4];
	unsigned int tmp[16];
	char count = 0;

	for(i=0; i<16; i++)
		tmp[i] = p[i];

	for(i=15; i>-1; i-=4) {
		//合并相邻的相等项
		for(j=i; j>i-4; j--) {
			for(n=1; n<j-(i-4); n++) {
				if(p[j-n]!=0) {
					if(p[j]==p[j-n]) {
						p[j] = p[j] + p[j-n];
						p[j-n] = 0;
						j = j - n;
						break;
					}
					else
						break;
				}
			}
		}

		count = 0;
		//计算第i行有多少个0
		for(n=0; n<4; n++) {
			if(p[i-n] == 0)
				count++;
			buf[3-n] = p[i-n];
		}

		//如果i行不全为0
		if(count < 4) {
			//获得非零元素右对齐的数组
			for(n=3, j=i; n>-1; n--) {
				if(buf[n] != 0) {
					p[i-(3-n)] = 0;		//把原数组中需要移动的元素所在位置清零
					p[j--] = buf[n];	//将非零元素右对齐
				}
			}
		}
	}

	//检查移动前移动后是否有变化,没变化说明不能移动
	for(i=0, count=0; i<16; i++)
		if(tmp[i] == p[i])
			count++;
	if(count == 16)
		return 1;
	else
		return 0;
}

//上方向键处理函数,为有效操作返回0,否则返回1
char key_up(unsigned int * p) {
	char i, j, n;
	unsigned int buf[4];
	unsigned int tmp[16];
	char count = 0;

	for(i=0; i<16; i++)
		tmp[i] = p[i];

	for(i=0; i<4; i++) {
		//合并相邻的相等项
		for(j=i; j<i+13; j+=4) {
			for(n=4; n<(i+13)-j; n+=4) {
				if(p[j+n]!=0) {
					if(p[j]==p[j+n]) {
						p[j] = p[j] + p[j+n];
						p[j+n] = 0;
						j = j + n;
						break;
					}
					else
						break;
				}
			}
		}

		count = 0;
		//计算第i行有多少个0
		for(n=0; n<4; n++) {
			if(p[i+(n*4)] == 0)
				count++;
			buf[n] = p[i+(n*4)];
		}

		//如果i行不全为0
		if(count < 4) {
			//获得非零元素顶对齐的数组
			for(n=0, j=i; n<4; n++) {
				if(buf[n] != 0) {
					p[i+(n*4)] = 0;		//把原数组中需要移动的元素所在位置清零
					p[j] = buf[n];		//将非零元素顶对齐
					j += 4;
				}
			}
		}
	}

	//检查移动前移动后是否有变化,没变化说明不能移动
	for(i=0, count=0; i<16; i++)
		if(tmp[i] == p[i])
			count++;
	if(count == 16)
		return 1;
	else
		return 0;
}

//上方向键处理函数,为有效操作返回0,否则返回1
char key_down(unsigned int * p) {
	char i, j, n;
	unsigned int buf[4];
	unsigned int tmp[16];
	char count = 0;

	for(i=0; i<16; i++)
		tmp[i] = p[i];

	for(i=15; i>11; i--) {
		//合并相邻的相等项
		for(j=i; j>i-13; j-=4) {
			for(n=4; n<j-(i-13); n+=4) {
				if(p[j-n]!=0) {
					if(p[j]==p[j-n]) {
						p[j] = p[j] + p[j-n];
						p[j-n] = 0;
						j = j - n;
						break;
					}
					else
						break;
				}
			}
		}

		count = 0;
		//计算第i行有多少个0
		for(n=0; n<4; n++) {
			if(p[i-(n*4)] == 0)
				count++;
			buf[3-n] = p[i-(n*4)];
		}

		//如果i行不全为0
		if(count < 4) {
			//获得非零元素底对齐的数组
			for(n=3, j=i; n>-1; n--) {
				if(buf[n] != 0) {
					p[i-(12-(n*4))] = 0;	//把原数组中需要移动的元素所在位置清零
					p[j] = buf[n];			//将非零元素底对齐
					j -= 4;
				}
			}
		}
	}

	//检查移动前移动后是否有变化,没变化说明不能移动
	for(i=0, count=0; i<16; i++)
		if(tmp[i] == p[i])
			count++;
	//count = 16说明数组没变,移动无效
	if(count == 16)
		return 1;
	else
		return 0;
}

//产生新的数字,为有效操作返回0,否则返回1
char new_buf(unsigned int * p) {
	unsigned int tmp[16];
	char n=0, count=-1;

	//将等于0的元素下标放在tmp中
	for(n=0; n<16; n++) {
		if(p[n] == 0)
			tmp[++count] = n;
	}
	count++;
	if(count != 0) {
		//生成[0, count)的随机数,即在p随机选取一个0,将其随机改为2或4
		p[tmp[rand()%count]] = (rand()%2) ? 2 : 4;
		return 0;
	}
	else
		return 1;
}

//数组是否满,满返回0,否则返回1
char buf_full(unsigned int * p) {
	/*
	 * 1. 数组中没有0
	 * 2. 对数组进行上下左右移动都不变
	 */
	char count = 0, i;
	unsigned int tmp[16];

	for(i=0; i<16; i++) {
		if(p[i] == 0)
			count++;
		tmp[i] = p[i];
	}

	if(count == 0) {
		if(!key_left(tmp))
			return 1;	//向左为有效移动,数组没满
		else if(!key_right(tmp))
			return 1;	//向右为有效移动,数组没满
		else if(!key_up(tmp))
			return 1;	//向上为有效移动,数组没满
		else if(!key_down(tmp))
			return 1;	//向下为有效移动,数组没满
		else
			return 0;	//数组满了
	}

	return 1;
}

 

运行截图(皮了一下)

2048截图01
2048截图01
2048截图02
2048截图02

 

完结撒花!!!

C语言实现2048小游戏 阅读详情

相关推荐

C语言实现《2048游戏》

滑块有颜色、有最高分(用到文件) #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; /*使用getch()函数*/ #include &lt;time.h&gt; #include &lt;windows.h&gt; /*使用Sleep()函数*/ void Menu();//菜单 vo...

[空白] 5051

C语言 2048源码(每步细致讲解更新ing)

前言 提示:这里可以添加本文要记录的大概内容: 昨天晚上突然想用c写个2048,觉得学了这么久,没写点什么东西有点心空空,就乘着备考时间来写写看,以前就想过,也就想想,一直没去写,今天没什么课,而且还是网课,然后就先看看别人写的代码之后,自己理解之后又重新敲了一遍,写了一天也算是写了个简易的2048。 2048的代码也不难,主要就是使用数组对数组的操作,再对数组移动改变的时候的逻辑清楚就没问题了。 写的很仓促,代码不怎么好看,以后有时间会慢慢优化并增加一些功能。 提示:以下是本篇文章正文内容,下面案例可.

weixin_44954896的博客 2万+

2048游戏(C语言)

2048游戏C语言代码是通过文件链接的方式实现的,主要的文件包含main.c(代码实现入口文件)、game2048.c(游戏内容处理)、game2048.h(头文件)、direction.c(方向键处理)、derection.h(头文件)、tools.c(显示界面、随机位置生成2、判断是否失败)、tools.h(头文件),下面也展现了它的 makefile 文件。......

Qqmnz的博客 5317

纯C语言2048,超详细

突然想写2048,就模仿人家写的2048,写了2048,但有所改良😁(改良了一点小毛病,但绝大部分都一样)

zhou_zhou_04的博客 1万+

2048小游戏的C语言实现方式

项目介绍:每次可以选择上下左右其中一个方向去滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢外,系统也会在空白的地方随机出现一个数字方块2或4,相同数字的方块在靠拢、相撞时会相加。不断的叠加最终拼凑出2048这个数字就算成功。 ...

T、的博客 4980

基于C语言以及easyx的2048游戏代码

bool// 遍历游戏板以检查是否还有空格子forinti = 0;i

2402_82428821的博客 2337

C语言实现2048极其详细

struct data//结构体存数据int x;//存储x轴地址int y;//存储y轴地址int score;我们定义一个结构进行存储每个空间的位置和数值//申请空间进行存放数据i<4;i++)//初始化数据j<4;j++)申请一个空间进行存储数据p是空间的首地址定义一个全局变量grade来存储分数将每一个数据的值都赋值为0。

2401_83827692的博客 3821

2048 c语言

c写的2048

2048游戏的C语言代码

2048游戏的C语言代码 大一上学期才接触编程,学习完C语言,一直只用它写老师布置的题总有些难受,总是面对黑白的控制台写题也太无聊了叭。后来学长推荐可以尝试编写一个简单的游戏,用C语言足矣。然后寒假在家完成了我的第一个游戏,后来又加上了不同颜色的功能。不说废话了,开始展示代码,大神勿喷哦。 #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; #incl...

欢迎来到我的世界 1万+

C语言2048源代码

大一时候写的小程序,有点小BUG不过还算能玩。给学习C语言的同学做个参考吧。

第1期技术: DQN算法原理及实现过程

利用神经网络近似值函数的方法表示为: V^(s,w)≈Vπ(s)q^(s,a,w)≈qπ(s,a) \hat{V}(s, w) \approx V_{\pi}(s) \\ \hat{q}(s, a, w) \approx q_{\pi}(s, a) V^(s,w)≈Vπ​(s)q^​(s,a,w)≈qπ​(s,a) 那么具体的工作过程是怎样实现的? 以及如何从端到端的过程,本文将讲解Deep Q Network(DQN, 而这正是由DeepMind于2013年和2015年分别提出的两篇论文《Playi

深度强化学习实验室:一个“开源开放、共享共进”的强化学习学术组织。 4953

2048的c语言实现

大一时学c语言写的,写的不好但当时感觉还行。。 环境运行 vc6.0 ,cpp文件。 基本上是c写的,但是改变字体颜色,在控制台移动光标等等好像不是c中的。 #include #include #include #include #include #define x0 26 #define y0 1 HANDLE hOutput=GetStdHandle

yanweibujian的博客 2688

绕过卡巴斯基通过RPC控制lsass注入DLL

参考国外的XPN以及3gstudent大佬的文章: https://blog.youkuaiyun.com/xiangshen1990/article/details/104872566 https://gist.github.com/xpn/93f2b75bf086baf2c388b2ddd50fb5d0 原理:正常的ssp扩展(dll)可以加载到lsass进程中去,比如kerberos验证都是通...

2ed 3524

用C语言编写2048游戏

2048_C_code 用C语言编写的2048 1 要实现我们的 2048 小游戏,需要涉及一些数据结构的知识,以及一些 Linux 的系统调用。此外,为了方便在屏幕上使用字符绘图,我们还需要使用一个文本界面的屏幕绘图库 ncurses ,具体到操作就是在编译的时候需要加上 -lcurses 选项。 安装ncurses库: sudo apt-get install libncurses5-dev ...

我的blog 4082

别再手动挂载NPU了!手把手教你用Ascend-Docker-Runtime一键启动昇腾AI容器

本文详细介绍了如何使用Ascend-Docker-Runtime一键启动昇腾AI容器,大幅简化NPU设备挂载流程。通过环境变量ASCEND_VISIBLE_DEVICES,开发者可以灵活指定NPU设备,提升开发效率。文章还提供了安装配置指南、高级使用技巧和常见问题排查方法,帮助开发者快速掌握这一高效工具。

weixin_42662605的博客 252

JumpServer未授权访问漏洞 CVE-2023-42442

JumpServer 是全球首款完全开源的堡垒机, 使用GNU GPL v2.0 开源协议, 是符合4A 的专业运维审计系统。 JumpServer 使用Python / Django 进行开发。2021年1月15日,阿里云应急响应中心监控到开源堡垒机JumpServer发布更新,修复了一处远程命令执行漏洞。由于 JumpServer 某些接口未做授权限制,攻击者可构造恶意请求获取到日志文件获取敏感信息,或者执行相关API操作控制其中所有机器。

holyxp的博客 1423

【C语言】2048小游戏【附源码】

C语言2048小游戏

m0_73367097的博客 8605

31、车载通信中的可见光通信(VLC)技术解析

本文详细解析了车载通信中可见光通信(VLC)技术的应用背景、优势及发展前景。对比传统RF通信技术(如DSRC),VLC利用LED照明设备实现高效、安全的车辆与车辆、车辆与基础设施之间的通信,具有频谱资源丰富、安全性高、无电磁干扰等优势。文章还探讨了VLC在交叉口交通控制、高速公路通信、自动驾驶等场景的应用潜力,展望了其在未来智能交通系统中的重要作用。

hill8的博客 318

C语言实现2048

本题目来自于一位去澳洲参加暑期交流的小朋友,为期一个多月的编程课程最后的Assignment就是用C语言在命令行中实现2048.具体要求:http://webapps.cse.unsw.edu.au/webcms2/course/index.php?cid=2360 请仔细看完并下载课程最后提供的实现部分功能的源文件:2048.c 本来以为需要考虑的部分很多,不过文档中已经帮我们梳理好

CatTalk 4万+

Amazon Skills:51个AI技能赋能亚马逊运营,从选品到广告全链路分析

在电商运营领域,数据分析和自动化工具正成为提升效率的关键。其核心原理在于将专业经验转化为结构化指令,使AI能够执行标准化流程。这种技术价值体现在降低专业门槛、提升决策效率,尤其适用于亚马逊这类数据驱动的电商平台。通过将选品、关键词研究、FBA费用计算、PPC广告优化等运营框架编码为可执行指令,AI助手能够模拟专家思维进行市场分析。Amazon Skills项目正是这一理念的实践,它提供51个覆盖运营全链路的技能模块,让卖家在自然对话环境中获得专业分析支持,实现从市场研究到利润核算的自动化工作流。

weixin_27134143的博客 1299

语言模型推理能力与计算表达力深度解析

语言模型的推理能力本质上是一种知识迁移与泛化应用的过程,其核心在于Transformer架构中的自注意力机制和前馈网络的协同作用。计算表达力作为衡量模型能力的关键指标,涉及函数逼近、组合泛化和上下文理解等多个维度。随着模型规模的扩大,涌现能力现象揭示了参数规模与推理能力之间的非线性关系。在实际应用中,通过提示工程和微调策略可以有效激活和优化模型的推理表现。当前研究正探索模块化架构和世界模型整合等方向,以突破长程推理和因果关系建模等前沿挑战。本文深入探讨了语言模型推理泛化的技术原理与实践方法,为理解计算表达力

weixin_42521032的博客 341

c语言 EasyX图形设计————2048

c语言版2048 一.前言 环境准备:vc系列(vc 6.0,vs2005等等)编译器,下载easy x easy x下载链接 easy x简介:相当于多加了一个库函数,头文件为:#include 可以绘图,加载图片,音乐,获取鼠标信息。 easy x官网链接 二. 效果截图 三. 程序框架和函数调用关系 1. 所有函数 main()

冰炭不投day的博客 1万+

【用unity实现100个游戏之16】Unity程序化生成随机2D地牢游戏1(附项目源码)

关于使用TileMap生成随机2D地图,其实之前已经有做过类似的,感兴趣可以看看 但是随着学习深入,发现之前做的比较粗糙和不够全面,最近又在外网看到

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2215

2048游戏编程C语言,使用C语言编写一个2048游戏

使用C语言编写一个2048游戏发布时间:2020-12-31 15:08:30来源:亿速云阅读:84作者:Leah这篇文章给大家介绍使用C语言编写一个2048游戏,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。代码如下#include#include#includevoidcolor(shortx){if(x>=0&&x<=15)SetCo...

weixin_36439236的博客 1859

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C语言简易小游戏实现—2048

2048小游戏是一款休闲益智类小游戏,游戏在一个4×4的方格上进行,在这里会不断产生方块,方块的初始值为2,玩家通过合并、消除方块使得方块的数值越来越大,最终合成2048的方块来获取胜利,游戏的核心功能逻辑简单易实现,通过C语言的函数功能,同时配合easyx图形库美化游戏界面,一个简单的2048小游戏即可实现。//创建游戏窗口,尺寸为500 * 700//创建游戏窗口//设置背景(方格间距)颜色//设置窗口为透明色//设置背景颜色//清除背景//打印游戏右侧区域并设置颜色//设置矩形填充颜色。

2301_77482503的博客 8562

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C语言简单实现2048游戏

main.c #include &lt;stdio.h&gt; #include "2048.h" int main(void) { //初始化 int arr[ROW][COL] = {0}; srand((unsigned int)time(NULL)); //欢迎界面 startInterface(); //运行游戏 runingGame(arr); return ...

ocfbnj的博客 1183

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

下一篇: 0.96寸ST7735的LCD 4线SPI调试小坑记录
该起床了1111
博客等级 码龄9年 67粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值