精华内容
下载资源
问答
  • Turbo C是美国Borland公司的产品,Borland公司是一家专门从事软件开发、研制的大公司。该公司相继推出了一套 Turbo系列软件, 如Turbo BASIC, Turbo Pascal, Turbo Prolog, 这些软件很受用户欢迎。
  • C语言编写聊天工具

    2010-12-06 16:51:19
    C语言编写聊天工具,类似于腾讯QQ,帮助你更好应用C语言
  • DOS下C语言编写工具,虽古老,但很实用 底层很好用。
  • C语言编写的IDE工具升级版,附VC源代码,这次重新写了一遍并加入的多工程,关键字蓝色显示,代码缩进等功能,大家自己看吧,这次代码有点多
  • 以前开发总用DBVIS类似的工具 感觉不是很满意 写了一个linux下快速操作数据库的工具 对后台开发者来说 简单的命令 方便的操作 能明显提高工作效率;搞后台开发的人懂滴 呵呵
  • 编写C语言工具,很方便的我试过了,我这有电子书如果有需要的请密我
  • 编写C语言工具

    2015-05-12 00:03:46
    用于编写C语言的开发工具,重点是只有30.2M
  • FC C语言简易编写工具

    2009-04-26 14:53:16
    FC,C语言简易编写工具,简易编写工具哦!非常好用的一款编程软件。有兴趣者不妨试一试。
  • C语言编写、运行工具

    2010-11-26 21:21:44
    很好很强大,适合初学者,简单易用,是学习C、C++的入门工具之一
  • 本软件是用C语言编写的聊天工具,里头的文件已经编译,可以运行,运行的客户端在Debug里头,先运行服务器,再运行客户端,输入主机IP地址(为该台电脑的IP地址),可以运行多个客户端进行聊天测试
  • C语言编写简单的朗读小工具

    千次阅读 2019-03-10 22:34:09
    朗读小工具 大家可能和我一样,在学完c语言之后,觉得很枯燥,今天无聊之时,我就将理论结合实践一下,做一个简单的c语言朗读器。(此处结合vbs脚本,保证很简单,人人都能够学会) 包含c语言基础知识 c语言基本...

    朗读小工具
    大家可能和我一样,在学完c语言之后,觉得很枯燥,今天无聊之时,我就将理论结合实践一下,做一个简单的c语言朗读器。(此处结合vbs脚本,保证很简单,人人都能够学会)

    包含c语言基础知识

    • c语言基本框架
    • c语言基本输入输出
    • c语言文件相关操作
    • c语言system函数

    vbs指令

    • CreateObject(“SAPI.Spvoice”).Speak " " 此处为简单的朗读指令

    具体的实现过程如下,请看项目源码

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    //任务:利用c语言基础编写一个简单的朗读小工具
    char buf[1024] = "";
    
    //设置窗口样式
    void showStyle()
    {
    	system("title 语音朗读");
    	system("mode con cols=80 lines=30");
    	system("color f0");
    
    }
    
    //接受用户输入
    void inputInfo()
    {
    	memset(buf, 0, 1024);     
    	printf("输入要朗诵的语句:");
    	scanf("%s", &buf);
    }
    
    
    
    int main()
    {
    	showStyle();
    	while (1)
    	{
    		FILE* fp = fopen("voice.vbs", "w");
    		inputInfo();
    		if (fp != NULL)
    		{
    			fprintf(fp, "CreateObject(\"SAPI.Spvoice\").Speak\"%s\"", buf);
    			fclose(fp);
    			system("voice.vbs");
    			system("del voice.vbs");
    		}
    		printf("朗诵内容为:%s\n", buf);
    		fclose(fp);
    	}
    	system("pause");
    	return 0;
    }
    

    总结
    看完上面的基础代码,是不是觉得很熟悉也很简单,就是利用c语言的文件相关操作进行的一点简单的操作而已,代码简单易懂,不妨可以试试看能不能朗诵你所输入的内容。

    展开全文
  • C语言编写PE格式分析工具

    五、输出数据目录表信息

    由于数据目录数组中包含16个元素,所以循环16次,依次输出每个数据目录表的信息:

    void ShowDataDirInfo(PMAP_FILE_STRUCT stMapFile)
    {
    char strTmp[9] = { 0 };
    char data[16][50] = {
    "Export Table:",
    "Import Table:",
    "Resource:    ",
    "Exception:   ",
    "Security:    ",
    "Relocation:  ",
    "Debug:       ",
    "Copyright:   ",
    "Globalptr:   ",
    "Tls Table:   ",
    "LoadConfig:  ",
    "IAT:         ",
    "Bound Import:",
    "COM:         ",
    "Delay Import:",
    "No Use:      "
    };


    PIMAGE_OPTIONAL_HEADER pOH = nullptr;
    pOH = GetOptionalHeader(stMapFile->ImageBase);
    if (!pOH)
    {
    return;
    }
    printf("\n\n[Data Directory]\n");
    printf("\t\t\t  RVA\t\t\t  Size\n");
    for (int i = 0; i < 16; i++)
    {
    printf("%s\t\t%08lX\t\t%08lX\n", data[i], pOH->DataDirectory[i].VirtualAddress, pOH->DataDirectory[i].Size);
    }
    }


    结果如下图所示:



    六、输出区块表信息

    首先获取指向第一个区块表的指针

    PIMAGE_SECTION_HEADER  GetFirstSectionHeader(LPVOID ImageBase)
    {
    if (!ImageBase)
    {
    return nullptr;
    }


    PIMAGE_NT_HEADERS pNH = nullptr;
    PIMAGE_SECTION_HEADER pSH = nullptr;
    pNH = GetNtHeaders(ImageBase);
    if (!pNH)
    {
    return nullptr;
    }


    pSH = IMAGE_FIRST_SECTION(pNH);
    return pSH;
    }


    然后根据IMAGE_FILE_HEADER中的SizeOfOptionalHeader判断区块表的数目,循环输出每一个区块表:

    void ShowSectionHeaderInfo(PMAP_FILE_STRUCT stMapFile)
    {
    PIMAGE_FILE_HEADER pFH = nullptr;
    PIMAGE_SECTION_HEADER pSH = nullptr;


    pFH = GetFileHeader(stMapFile->ImageBase);
    if (!pFH)
    {
    return;
    }


    WORD OptionalLength = pFH->SizeOfOptionalHeader;
    PIMAGE_OPTIONAL_HEADER pOH = GetOptionalHeader(stMapFile->ImageBase);
    pSH = (PIMAGE_SECTION_HEADER)((DWORD)pOH + OptionalLength);


    printf("\n\n[Section Table]\n");
    printf(" Name    VAddress   VSize    RAddress   RSize     Flags\n");
    for (int i = 0; i < pFH->NumberOfSections; i++)
    {
    printf("%s\t%08lX  %08lX  %08lX  %08lX  %08lX\n", pSH->Name, pSH->VirtualAddress, pSH->Misc, 
    pSH->PointerToRawData, pSH->SizeOfRawData, pSH->Characteristics);
    pSH++;
    }
    }


    结果如图所示:



    主函数:

    MAP_FILE_STRUCT stMapFile = { nullptr, nullptr, nullptr };


    int main()
    {
    LPTSTR filePath = TEXT("D:\\PEInfo_example.exe");
    UnLoadFile(&stMapFile);
    if (!LoadFile(filePath, &stMapFile))
    {
    return -1;
    }


    if (!IsPEFile(stMapFile.ImageBase))
    {
    UnLoadFile(&stMapFile);
    return -1;
    }

    ShowFileHeaderInfo(&stMapFile);

    ShowDataDirInfo(&stMapFile);
    ShowSectionHeaderInfo(&stMapFile);

    UnLoadFile(&stMapFile);
    return 0;
    }


    展开全文
  • 一个小工具c语言编写,对于批量操作的用户有一定帮助,在CMD中运行。提示:在开始输入地址时,请正确输入,“..”表示当前前级目录。
  • 各位,今天给大家带来C语言结合VBS脚本写的一个简单的朗读小工具,做一个能够发音的C语言程序(保证简单,人人都能学会)。具备的知识体系:C语言基本框架C语言输入输出C语言文件操作C语言sy...

    各位,今天给大家带来C语言结合VBS脚本写的一个简单的朗读小工具,做一个能够发音的C语言程序(保证简单,人人都能学会)。


    具备的知识体系:

    C语言基本框架

    C语言输入输出

    C语言文件操作

    C语言system函数

    VBS指令:Createobject("SAPI.SpVoice").Speak "I LOVE YOU"

    C语言基本框架

    • 头文件 #include

    • 主函数:main函数

    C语言输入输出

    • printf 函数,掌握下原样打印以及字符串打印就够了。

    • scanf函数 (这个函数都不需要。)

    C语言文件操作基本操作:

    • 打开文件:fopen函数

    • 格式化写操作:fprintf 函数

    • 关闭文件即可

    C语言system函数

    • 头文件包含:#include

    • 学会system 的机制即可,可以把指令返回给系统

    • 调整下窗口样式

    VBS指令

    指令:Createobject("SAPI.SpVoice").Speak "I LOVE YOU" ,其实就是VBS的一个指令而已,自行脑补,不懂找度娘。

    用法:写入txt文件 ,把txt文件后缀改为vbs 你双击就可以运行了。就可以把I Love you 读出来哦,就这么简单。

    由此可以把整个工程写出来了。

    头文件与全局变量

    调整窗口样式

    很简单,指令而已

    接受用户输入

    就是一个输入函数而已

    主函数文件操作

    看完快去把代码运行下,看能否让程序发出声音,如果这是你第一个发音程序,那就恭喜哦,记得点好看,感谢耐心阅读!

    声明:

    本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

    展开全文
  • C语言编写贪吃蛇游戏

    2021-05-03 11:39:04
    C语言编写贪吃蛇游戏 ​ 完成了一下c语言入门完成的必修课——贪吃蛇游戏。边学边做也搞了一天,所以记录一下自己的学习过程吧! 工具 ​ 因为我本来是用vscode进行编码的,发现不可以,查询才发现,vscode采用mingw...

    C语言编写贪吃蛇游戏

    ​ 完成了一下c语言入门完成的必修课——贪吃蛇游戏。边学边做也搞了一天,所以记录一下自己的学习过程吧!

    工具

    ​ 因为我本来是用vscode进行编码的,发现不可以,查询才发现,vscode采用mingw,而制作图形界面的easyx使用的是支持的是vs的一些内容。

    ​ 而我只是想制作贪吃蛇,对easyx没太多要求,能运行就行,加上安装vs2019并不复杂,并且需easyx装到vs2019里极其方变,下载然后打开,在install界面选择vs2019即可。就装了一个vs2019。

    ​ 但使用过程只能说相当自闭。

    ​ vs2019:https://visualstudio.microsoft.com/zh-hans/vs/

    ​ easyx:https://easyx.cn/

    游戏框架

    ​ 需要一条可以根据按键运动的蛇,只需要使得蛇头在按键的作用下左右上下移动即可,蛇的其他部分只需要移动到前一节蛇的位置。需要不断出现的食物,当蛇碰到食物时,食物消失并刷新出新食物。当蛇碰到自己时游戏结束。

    需要准备的元素:方向常量;蛇的结构体;食物的结构体

    函数设定:初始化函数;绘图函数;按键控制函数;移动函数;吃食物判定函数;死亡判定;主函数;

    最终结果:

    在这里插入图片描述

    游戏初始

    可以先定义一个最大长度:

    #define SNAKE_NUM 500//蛇的最大节数

    struct Snake {
    	int size;//蛇的长度
    	int dir;//蛇的方向
    	int speed;// 蛇的速度
    	int score;
    	POINT coor[SNAKE_NUM];//POINT是定义好的一个结构体,内含long x;long y
    }snake;
    

    其中方向,需要进行枚举:

    enum DIR {//表示方向
    	UP,
    	DOWN,
    	LEFT,
    	RIGHT,
    };
    

    这与#define UP #define LEFT 是等价的,就是定义一些常量为了后续使用

    而后是定义食物的结构:

    struct FOOD {
    	int x;
    	int y;
    	int r;
    	bool flag; //食物是否被吃
    	DWORD color;//食物颜色
    }food;
    

    因为只有一个food所以没有必要用POINT进行二次引用了、

    定义好了结构体后就要对其进行初始化了,即对这些内容进行赋值操作:

    void GameInit(){
        initgraph(640, 480);
        snake.size = 3;
    	snake.speed = 10;
    	snake.dir = RIGHT;//给定一个方向
    	snake.score= 0;
        //将蛇的位置先赋值了
    	for (int i = snake.size  - 1; i >= 0 ; i--) {
    		snake.coor[i].x = 40 - 10 * i;
    		snake.coor[i].y = 10;
    	}
    	//初始化食物
    	srand(time(0));//记得需要#include <time.h>
    	food.x = rand() % 640;
    	food.y = rand() % 480;
    	food.color = RGB(rand() % 256, rand() % 256, rand() % 256);
    	food.r = rand() % 10 + 5;
    	food.flag = true;
    }
    

    记得一定要记好哪一个是宽度哪一个是高度,因为这个小细节改bug至少一个小时

    绘图过程

    绘图就是将移动蛇的过程动态化,这里需要说明的是,我们需要采用双缓冲绘图:

    双缓冲即在内存中创建一个与屏幕绘图区域一致的对象,先将图形绘制到内存中的这个对象上,再一次性将这个对象上的图形拷贝到屏幕上,这样能大大加快绘图的速度。

    如果不使用双缓冲绘图,那么很容易造成闪烁效果:

    void GameDraw() {
    	BeginBatchDraw();//双缓冲绘图
    	setbkcolor(RGB(28,115,119));//设置背景颜色
    	cleardevice();//清屏操作
    	//绘制蛇
    	setfillcolor(YELLOW);
    	for (int i = 0; i < snake.size; i++) {
    		solidcircle(snake.coor[i].x, snake.coor[i].y, 5);
    	}
    	EndBatchDraw();
        //绘制食物
    	setfillcolor(food.color);
    	if (food.flag) {
    		solidcircle(food.x, food.y, food.r);
    	}
        //写上分数
    	char temp[20] = "";
    	_stprintf_s(temp, "分数:%d",snake.score);
    	outtextxy(20, 20, temp);
    	EndBatchDraw();
    }
    

    这里倒没什么好说的,唯一值得说一下的就是在outtextxy有蛮多限制的。

    会报一个错误:

    error C2665: “outtextxy”: 2 个重载中没有一个可以转换所有参数类型

    为了使temp是在outtextxy是可接受的函数参数,需要在头文件的上方加上

    #undef UNICODE
    #undef _UNICODE

    即将这个项目以 MBCS 编码编译

    而我当时由于使用sprintf输入temp,vs2019不指出错误,只是单纯无法运行,去参考了easyx文档才改成了_stprintf_s解决了这个问题。废了相当长时间,简直拳头硬了。

    蛇的移动

    解决了绘图问题,我们就要开始真正移动我们的蛇了:

    首先我们应该根据键盘操作确定蛇的移动方向:

    键盘操作函数

    void keyControl() {
    	//判断有没有按键
    	if (_kbhit()) {//头文件#include <conio.h>
    		switch (_getch()) {
    		case 'w':
    		case 72:
    			if (snake.dir != DOWN)
    			snake.dir = UP; break;
    		case 's':
    		case 80:
    			if (snake.dir != UP)
    			snake.dir = DOWN; break;
    		case 'a':
    		case 75:
    			if (snake.dir != RIGHT)
    			snake.dir = LEFT; break;
    		case 'd':
    		case 77:
    			if (snake.dir != LEFT)
    			snake.dir = RIGHT; break;
    		case ' '://游戏暂停
    			while (1) {
    				if (_getch() == ' ')
    					return;
    			}
    		}
    	}
    }
    

    _kbhit()就是按键的判断,如果没有进行按键,则返回一个0值。故若有按键,则执行if中的内容。

    话说我还是感觉离谱,因为要使用easyx才安装了vs2019,但是一些基本操作比如getchar他非得改成_getch,叹息。

    加了一个无法朝相反方向移动的判定,即如果向前运动则不能直接改变方向为向后。

    case后的数字代表小键盘操作。

    额外加了游戏暂停判定。如果键入空格,则进入死循环中直到再次键入空格。

    移动蛇函数:

    void snakemove() {
    	for (int i = snake.size - 1; i > 0; i--) {
    		snake.coor[i] = snake.coor[i - 1];
    	}
    	switch (snake.dir) {
    		case UP: {
    			snake.coor[0].y -= snake.speed;
    			if (snake.coor[0].y <= 0) {//超出上界
    				snake.coor[0].y = 480;
    			}
    			break;
    		}
    		case DOWN: {
    			snake.coor[0].y += snake.speed;
    			if (snake.coor[0].y >= 480) {
    				snake.coor[0].y = 0;
    			}
    			break;
    		}
    		case LEFT: {
    			snake.coor[0].x -= snake.speed;
    			if (snake.coor[0].x <=0) {
    				snake.coor[0].x = 640;
    			}
    			break;
    		}
    		case RIGHT: {
    			snake.coor[0].x += snake.speed;
    			if (snake.coor[0].x >= 640) {
    				snake.coor[0].x = 0;
    			}
    			break;
    		}
    	}
    }
    

    我们可以直到,移动蛇其实就是移动蛇头,而后再将蛇身的每一节的位置改变为他的前一节。

    第一个for循环就是为了第二个操作。

    移动蛇头到边界时就使蛇从反方向出现,也可以当蛇碰到边界后死亡,这没什么问题。(但是食物生成偶尔在边界,我测试时为了不增加难度就改成了这样。手残党悲哀)

    吃食物过程

    void eatfood(){
    	if (food.flag && (snake.coor[0].x >= food.x - food.r && snake.coor[0].x <= food.x + food.r) &&
    		(snake.coor[0].y >= food.y - food.r && snake.coor[0].y <= food.y + food.r)) {
    		food.flag = false;
    		snake.size++;
    		snake.score += 5;
    	}
    	//食物消失则重新初始化
    	if (!food.flag){
    		srand(GetTickCount());//GetTickCount()获取系统开机到现在所需毫秒数
    		food.x = rand() % 640;
    		food.y = rand() % 480;
    		food.color = RGB(rand() % 256, rand() % 256, rand() % 256);
    		food.r = rand() % 10 + 10;
    		food.flag = true;
    	}
    }
    

    吃食物也很好理解,即蛇头处于食物的范围中即可。

    让我有点自闭的是,如果我再重新生成食物的时候仍把随机种子设为time(0),食物的y坐标始终变化不大,基本可以不操作也可以吃到食物。最终我也没拍出这个bug,只能参考其他人,改成了GetTickCount()这个函数。

    游戏终止过程

    就是蛇吃到它自己,则终止。

    void EatSelf()
    {
    	for (int i = 1; i < snake.size; i++)
    	{
    		if (snake.coor[0].x == snake.coor[i].x && snake.coor[0].y == snake.coor[i].y)
    		{
    			outtextxy(200, 200, "Game over!");
    			int a = _getch();  //保持停顿
    			exit(0);
    		}
    
    	}
    }
    

    为什么要用int a = _getch(); 这句话呢,因为vs2019需要一个承载_getch()返回值的变量,我真是服了。

    最后加上主函数就可以了

    int main() {
    	GameInit();
    	while (1) {
    		GameDraw();
    		snakemove();
    		keyControl();
    		eatfood();
    		EatSelf();
    		Sleep(50);
    	}
    	int b = _getch();
    	closegraph();
    	return 0;
    }
    

    哦对了,需要说明一下Sleep,是使得执行过程停顿x毫秒,如果不休眠的话蛇向右运动的速度我们反应不过来,当然你也可以把休眠时间缩短,效果如图:

    在这里插入图片描述

    md不玩了,辣鸡游戏(并不)

    那么最后展示一下整体代码吧:

    整体代码

    #undef UNICODE
    #undef _UNICODE
    
    #include <stdio.h>
    #include <graphics.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <time.h>
    #define SNAKE_NUM 500//蛇的最大节数
    
    enum DIR {//表示方向
    	UP,
    	DOWN,
    	LEFT,
    	RIGHT,
    };
    //蛇的结构
    struct Snake {
    	int size;//蛇的长度
    	int dir;//蛇的方向
    	int speed;// 蛇的速度
    	int score;
    	POINT coor[SNAKE_NUM];//POINT是定义好的一个结构体,内含long x;long y
    }snake;
    
    //食物的结构
    struct FOOD {
    	int x;
    	int y;
    	int r;
    	bool flag; //食物是否被吃
    	DWORD color;//食物颜色
    }food;
    
    //数据初始化
    void GameInit() {
    	//init初始化graph图形窗口 SHOWCONSOLE显示控制台
    	initgraph(640, 480/*,SHOWCONSOLE*/ );
    	snake.size = 3;
    	snake.speed = 10;
    	snake.dir = RIGHT;
    	snake.score= 0;
    	for (int i = snake.size  - 1; i >= 0 ; i--) {
    		snake.coor[i].x = 40 - 10 * i;
    		snake.coor[i].y = 10;
    	}
    	//初始化食物
    	srand(time(0));//GetTickCount()获取系统开机到现在所需毫秒数
    	food.x = rand() % 640;
    	food.y = rand() % 480;
    	food.color = RGB(rand() % 256, rand() % 256, rand() % 256);
    	food.r = rand() % 10 + 5;
    	food.flag = true;
    }
    
    void GameDraw() {
    	//双缓冲绘图
    	BeginBatchDraw();
    	//设置背景颜色
    	setbkcolor(RGB(28,115,119));
    	cleardevice();
    	//绘制蛇
    	setfillcolor(YELLOW);
    	for (int i = 0; i < snake.size; i++) {
    		solidcircle(snake.coor[i].x, snake.coor[i].y, 5);
    	}
    	//绘制食物
    	EndBatchDraw();
    	setfillcolor(food.color);
    	if (food.flag) {
    		solidcircle(food.x, food.y, food.r);
    	}
    	char temp[20] = "";
    	_stprintf_s(temp, "分数:%d",snake.score);
    	outtextxy(20, 20, temp);
    	EndBatchDraw();
    }
    
    //移动蛇
    void snakemove() {
    	for (int i = snake.size - 1; i > 0; i--) {
    		snake.coor[i] = snake.coor[i - 1];
    	}
    	switch (snake.dir) {
    		case UP: {
    			snake.coor[0].y -= snake.speed;
    			if (snake.coor[0].y <= 0) {//超出上界
    				snake.coor[0].y = 480;
    			}
    			break;
    		}
    		case DOWN: {
    			snake.coor[0].y += snake.speed;
    			if (snake.coor[0].y >= 480) {
    				snake.coor[0].y = 0;
    			}
    			break;
    		}
    		case LEFT: {
    			snake.coor[0].x -= snake.speed;
    			if (snake.coor[0].x <=0) {
    				snake.coor[0].x = 640;
    			}
    			break;
    		}
    		case RIGHT: {
    			snake.coor[0].x += snake.speed;
    			if (snake.coor[0].x >= 640) {
    				snake.coor[0].x = 0;
    			}
    			break;
    		}
    	}
    }
    //吃食物
    void eatfood(){
    	if (food.flag && (snake.coor[0].x >= food.x - food.r && snake.coor[0].x <= food.x + food.r) &&
    		(snake.coor[0].y >= food.y - food.r && snake.coor[0].y <= food.y + food.r)) {
    		food.flag = false;
    		snake.size++;
    		snake.score += 5;
    	}
    	//食物消失则重新初始化
    	if (!food.flag){
    		srand(GetTickCount());//GetTickCount()获取系统开机到现在所需毫秒数
    		food.x = rand() % 640;
    		food.y = rand() % 480;
    		food.color = RGB(rand() % 256, rand() % 256, rand() % 256);
    		food.r = rand() % 10 + 10;
    		food.flag = true;
    	}
    }
    
    
    
    //通过按键改变蛇的移动方向
    void keyControl() {
    	//判断有没有按键
    	if (_kbhit()) {//头文件#include <conio.h>
    		switch (_getch()) {
    		case 'w':
    		case 72:
    			if (snake.dir != DOWN)
    			snake.dir = UP; break;
    		case 's':
    		case 80:
    			if (snake.dir != UP)
    			snake.dir = DOWN; break;
    		case 'a':
    		case 75:
    			if (snake.dir != RIGHT)
    			snake.dir = LEFT; break;
    		case 'd':
    		case 77:
    			if (snake.dir != LEFT)
    			snake.dir = RIGHT; break;
    		case ' '://游戏暂停
    			while (1) {
    				if (_getch() == ' ')
    					return;
    			}
    		}
    	}
    }
    
    void EatSelf()
    {
    	for (int i = 1; i < snake.size; i++)
    	{
    		if (snake.coor[0].x == snake.coor[i].x && snake.coor[0].y == snake.coor[i].y)
    		{
    			outtextxy(200, 200, "Game over!");
    			int a = _getch();  //保持停顿
    			exit(0);
    		}
    
    	}
    }
    
    
    int main() {
    	GameInit();
    	while (1) {
    		GameDraw();
    		snakemove();
    		keyControl();
    		eatfood();
    		EatSelf();
    		Sleep(50);
    	}
    	int b = _getch();
    	closegraph();
    	return 0;
    }
    

    总结

    第一次完成一个小项目,乐趣还是很充分的,对c语言学习也更有兴趣了。

    另一方面,做一个东西才发现自己的知识的薄弱,和平常做的各种题目的感觉完全不一样,太多太多你需要去学习的东西了,也就有了更大动力去学习吧。

    但还是有一些遗憾,到底没有实现bgm的播放,死活放不出声音来,我也就没把代码逻辑放到上面了。

    希望随着学习的深入能够回来再改改?

    看有大佬15行写出一个贪吃蛇?我比他十倍还多一点,还是要继续学习呀,加油吧!

    展开全文
  • 以上代码基于linux内核的工具上改写而成,本文的代码可以在任意系统上运行。linux内核级的代码如下: #include #include #include #include #include #include #include #define RK322X_...
  • MOTET是一个用C语言编写的微型快速超级加密应用程序,具有新的CSPRNG /流密码MOTE和BEDBUG的三个变体,以及ISAAC密码中的“黄金标准”。 MOTET带来了多种级别的加密,包括密文哈希,Vigenere混合功能,在主密钥流上...
  • C语言编写的万年历

    2015-10-05 14:28:04
    C语言编程的日历工具源代码,基于C++开发,本代码仅供娱乐和学习之用。
  • 1、掌握在Ubuntu系统下用C语言编写一个程序,在Windows系统下的编译工具编译其中的主程序文件并运行 2、了解学习Makefile方式,并实现编程 开发环境 Ubuntu-16.04.6-desktop-i386 vc++6.0 一个简单的
  • 一个非常实用的MP3测试工具,用于MP3开发时进行检测。
  • C语言编写之冒泡排序

    万次阅读 多人点赞 2018-08-16 13:22:00
    版权声明:本文为博主原创...在visual C++ 6.0上,用C语言编写,冒泡排序 百度经验:jingyan.baidu.com 工具/原料 visual C++ 6.0 百度经验:jingyan.baidu.com 方法/步骤 1 打开visualC++6.0- 文件-新建-文...
  • Ultra Markdown,一种超快速(高性能)的Markdown解析器,符合用纯C语言编写的markdown,并具有适用于Python 3.7+的绑定。 与其他工具不同, Ultra Markdown是使用Python的C API,并使用 (用C编写的超快速Markdown...
  • C语言编写倒计时程序

    热门讨论 2008-11-11 20:06:37
    倒计时 这是用C语言编写的一个简单的计时工具; 可以插在其他较大的程序中
  • 电脑用VC++6.0打开含OpenGL工具使用C语言编写的程序后显示如图问题,是什么情况?![图片](https://img-ask.csdn.net/upload/201705/25/1495711841_943525.jpg)
  • c语言开发工具 在WINDOWS 下 直接编写c语言工具
  • 最近在学习Easyx的使用 在使用图形库Easyx设计界面时常常因为坐标参数的设置而烦恼,少量图形还可以反复调试,而面对大量对象必然耗费大量时间。 于是我就在想能不能设计一个程序可以将图形坐标可视化地反映并输出。...
  • c语言编写图书管理系统例子

    千次阅读 2021-04-08 20:37:59
    #关于用C语言(c++类似)编写一个在控制台展示的图书管理系统(帮朋友写的课程作业) #其中只有图书增加 删除 借书 还书 查找图书 5个功能(小试牛刀) #工具:visual studio2019 #设计图 #思路是:打算用链表操作...
  • 代码简易好理解,适用于新手学习,便宜实惠,是校园课程设计必备工具

空空如也

空空如也

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

c语言编写工具

c语言 订阅