C语言贪吃蛇课程设计实验报告(包含贪吃蛇项目源码)

news2025/1/16 14:06:24

文末有贪吃蛇代码全览,代码有十分细致的注释!!!
文末有贪吃蛇代码全览,代码有十分细致的注释!!!
文末有贪吃蛇代码全览,代码有十分细致的注释!!!

码文不易,给个免费的小星星和免费的赞吧,关注也行呀(⑅•͈ᴗ•͈).:*♡ 

不要白嫖哇(⁍̥̥̥᷄д⁍̥̥̥᷅ ू )伤心

目录

1 课题分析 

1.1研究背景与现状

1.2研究意义与研究步骤

2 设计概述

2.1 项目具体内容

2.2 系统框图

2.2.1程序结构图

2.2.2游戏流程图

2.2.3查看规则界面流程图

2. 系统模块划分

3 详细设计说明

3.1 主菜单界面设计说明

3.1.1 设计说明

3.1.2 功能展示

3.2 查看规则界面设计说明

3.2.1 设计说明

3.2.2 功能展示

3.3 开始游戏界面设计说明

3.3.1 设计说明

3.3.2 功能展示

4 结论


设计题目: 贪吃蛇大作战

设计内容与要求:

设计内容:

使用C语言编程,设计出贪吃蛇游戏功能。其中该项目主要分为三个界面,分别是菜单界面,规则界面和游戏主体界面。

创新点: 将蛇身单一颜色变为随游戏进程变化的彩虹色,修改速度机制和分数奖励机制,新增鼠标交互式菜单,增强游戏体验。

设计要求:

通过游戏设计巩固C语言知识,合理规范书写函数并正确调用。运用easyx增加拓展性内容,理解所使用函数的方法。

设计中遇到报错及时调试分析,查阅资料,对同一功能进行多方法比较使用,确保代码正确,正常运行。

指导教师:

1 课题分析 


1.1研究背景与现状

随着计算机行业迅速发展,也涌现了多种热门编程语言,作为使用十分广泛的高级程序设计语言,C语言程序开发学习尤为重要,其绘图能力强,可移植性,具有强大数据处理能力的特点,适于编写系统软件、图形和动画。

当今游戏成为时下比较流行的一种消遣方式,贪吃蛇这款游戏正好符合大众心理,适应人群广泛,具有很强的娱乐性和交互性,可以丰富人们娱乐时间。

贪吃蛇作为一款小游戏,运行简单,易上手,游戏机制的刺激性强,能引人入胜,爱不释手,且相较于大型游戏的长时间消耗,贪吃蛇对碎片化娱乐时间更具有合理性,可以做到简单易行,满足人们需求。

本文主要目的为研究并设计C语言贪吃蛇游戏,利用EasyX Graphics Library免费绘图库实现游戏画面,函数设计与调用,制定游戏规则与运行机制,并在Windows控制台主机输出画面,实现游戏运行。

1.2研究意义与研究步骤

研究意义:

在快节奏社会中,人们时间更加紧凑,娱乐休闲时间也显得十分紧促,在大型游戏受众范围广的情况下,轻游戏和快游戏更紧贴胃口,在碎片化时间里让用户得到更满足的快节奏娱乐体验。

通过贪吃蛇小游戏,人们不仅可以在休闲时间娱乐,还可以在游戏中记录自己的分数记录,在一次次挑战中提升自我,游戏的用意也是告诉人们不断向前,突破自我,向着目标前行才能取得成功。同时,研究C语言课程设计,编写贪吃蛇游戏,可以锻炼思维,熟悉代码运用,有利于为未来项目开发积累经验,全面发展。

研究步骤:

(1)设计: 游戏最重要的是界面显示设计,要考虑游戏窗体大小,文字内容提示,让用户在打开游戏过程中有良好的运行体验,明确每个功能的作用与游戏操作。其次是设计流畅良好的键鼠操作,让玩家有更良好的交互反馈。

(2)游戏程序测试是关键步骤。每增加一个游戏功能函数,就要对其进行实例测试,确保代码无报错、贪吃蛇运行过程无误、游戏界面无不良输出。并在键鼠交互保证其流畅性和稳定性,为用户提供良好的游戏体验。

2 设计概述


2.1 项目具体内容

该项目通过C程序语言以及EasyX Graphics Library绘图库设计出贪吃蛇游戏程序。其中该项目主要分为三个界面,分别是主菜单界面,规则界面和开始游戏界面。

通过主菜单界面我们可以进入开始游戏界面,通过鼠标交互点击按钮,即可开始游戏,游戏可实时计分。在查看规则界面可以看到贪吃蛇游戏规则设定,并查看游戏历史最高分。如果想退出游戏,便可在主菜单选择退出按钮结束程序运行。

2.2 系统框图

2.2.1程序结构图

贪吃蛇游戏程序主要由主菜单界面,游戏界面,规则界面和退出游戏界面构成如图2-1所示。

图2-1 程序结构图

2.2.2游戏流程图

游戏的主体由几个函数构成,分别为游戏初始化函数,画面显示函数,分数读写函数,交互函数,下面是游戏运行的流程图,如图2-2所示:

图2-2 游戏流程图 

2.2.3查看规则界面流程图

查看规则界面由读取最高分、界面文字输出和鼠标按钮交互实现,定义结构体鼠标,判断其行为,如果不点击按钮,则处于规则界面不进行任何操作,如图2-3所示:

图2-3 规则界面流程图

2. 系统模块划分

课程项目设计中,贪吃蛇游戏主要分为三个界面,分别是菜单界面,规则界面和游戏主体界面。模块划分为主菜单模块、游戏初始化、画面显示、蛇移动模块、与键盘输入有关的更新(即键盘控制蛇的移动方向)、与输入无关的更新(移动速度控制),奖励机制、分数模块

在主菜单界面设计当中,我们通过easyx图形库来设计出按钮的选项,并对界面着色,通过监控鼠标左键的行为及鼠标点击位置来判断用户所选择的按钮选项,以此实现交互,完成界面跳转

当选择“开始游戏”选项,则进入游戏开始函数,进行游戏的初始化和最高分读取,对蛇及画面进行初始化,而后进入循环,当不满足游戏的失败条件,界面就会一直更新绘图,确保游戏的持续进行

其中在贪吃蛇游戏的速度机制和奖励机制分别做了改良,速度可以同时满足长按方向键加速前进,并且吃的食物越多,速度越快;分数奖励机制则满足一定的阈值限定,每当吃的食物达到一定程度,分数会以倍数增加,提高奖励分。

在游戏失败结算界面中,我们添加了分数显示,更直观地看到此局游戏中用户所得分数,而在分数模块,会进行txt文件读写操作,如果玩家分数大于最高分,则此局分数覆盖最高分。

3 详细设计说明


3.1 主菜单界面设计说明

3.1.1 设计说明

主菜单界面运用图形库的绘画功能,绘画出按钮矩形,并在按钮输出提示文字,让玩家理解其功能作用,并通过while函数时刻监控鼠标消息,当鼠标左键单击时,再进行if判断语句,当符合其中一个按钮的点击位置时,就进入该if语句中的函数,实现跳转功能

3.1.2 功能展示

主菜单界面如图3-1所示。

图3-1 主菜单界面

3.2 查看规则界面设计说明

3.2.1 设计说明

查看规则界面功能:在查看规则界面中,玩家可以了解规则事项以及游戏涉及到的按键操作,同时在此界面显示最高分,让玩家有一个游戏目标,在了解相关规则后,玩家可以点击按钮返回主菜单,选择开始游戏或退出游戏。 

具体实现:实现的界面展示与主菜单一致,读取最高分则利用到编写的分数读写函数,把txt文件中的分数读取并显示于界面上

3.2.2 功能展示

查看规则界面如图3-2所示。

图3-2查看规则界面

3.3 开始游戏界面设计说明

3.3.1 设计说明

开始游戏界面功能:实现游戏的主体,绘画蛇、食物与游戏界面,键盘操作贪吃蛇移动吃食物,界面展示最高分,并随着进程进行,实时记录分数,当游戏结束时,弹出结算画面字样

具体实现:通过设置画布大小确定界面,并画横竖线把画布分为小方格,计算固定的像素值,把每个矩形方格都一一对应方格数组。在游戏初始化时遍历该数组来绘画蛇以及食物,此后每一次画面更新,都会遍历数组刷新蛇的长度和食物位置。

实时记录分数则通过定义一个int变量,根据分数机制增加对应数值,然后转化成char类型存入字符数组,再将其输出至画面。

游戏结算界面则通过判断蛇头所处位置,让全局变量改变数值,跳出游戏的循环,并输出相应文字。

3.3.2 功能展示

游戏界面如图3-3图3-4所示。

图3-3 游戏界面

 图3-4 游戏结算界面

4 结论


通过一个学期的C语言课程的学习,我与我的组员对c语言有了更深一步的了解。从一开始的什么都不会,自己一点点慢慢的摸索。发现书本上学到的东西还是很不够的,还有好多东西需要课外的学习。对于贪吃蛇,知道了它的实现原理,学会了对程序的模块设计、数据结构设计的简单分析。并通过源码分析讲述了各个模块的实现方法。在几个模块的实现过程中渗透了部分图形功能函数。通过本文的编写过程 ,掌握了以下几点知识点:

1.图形系统的初始化和关闭

2.各种画图函数的使用

3.结构体的定义

5.函数嵌套及调用

6.键盘操作

总的来说,编程还是一个很需要耐心的工作,特别是有bug找不出来的时候,特别需要我静下心来好好研究。很多时候都没有耐心改下去了。这次学习对我们组的耐心是一个极大的磨砺,收获还是蛮多的,在这次课程设计中我们巩固了C语言知识,学会了合理规范书写函数并正确调用,并且能够运用easyx增加拓展性内容,最重要的是发现了自己的不足之处。

我们接下来会再接再厉,不断实践,不断突破自己,争取做出更好的作品。

附录:

贪吃蛇程序如下:

#include <graphics.h>
#include <windows.h>
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <cstdio>

#define	Width 40		//宽40格
#define Height 30		//高30格
#define Size 20			//格子大小:20

int blocks[Width][Height] = {0};		//用以表示所有方格
char moveDir;			//表示运动方向
char oldmove;			//旧的移动方向
int fx, fy;				//food食物坐标
int addspeed = 15;		//控制初始速度
int failure = 0;		//用以判断游戏是否失败,失败赋值为 1
int score = 0;			//记录分数
int max = 0;			//记录最高分
int k = 1;				//奖励机制初始值
char num[20];			//输出分数数组
char best[20];			//最高分数组	

void initGame();
void show();			//图像绘制更新显示函数
void WithInput();		//与输入有关的更新
void WithoutInput();	//与输入无关的更新
void movesnake();		//蛇的移动函数
void readscore();		//读取分数
void writescore();		//写入分数
void ShowWord();		//界面文字
void drawmenu();		//主菜单
void gamestart();		//开始游戏
void seerule();			//查看规则
void back();			//退出游戏

int main() {				
	drawmenu();
	return 0;
}	  

void initGame() {		
	int i;
	initgraph(1000, 600);		//①初始化绘图窗口,格子个数乘格子大小即为长度
	setbkcolor(CYAN);		//设置背景颜色
	BeginBatchDraw();		//easyx中实现批绘图功能的函数,可以消除图像闪烁
	cleardevice();			//使用当前背景色清空绘图设备
	setlinecolor(WHITE);	//划线颜色为白色

	for (i = Size; i < Width * Size+1; i += Size) {		//用for循环绘制多条线
		line(i, 0, i, Height * Size);				//竖线坐标从x1(i,0)-> y1(i,Height * Size)
	}
	for (i = Size; i < Height * Size; i += Size) {
		line(0, i, Width * Size, i);				//横线坐标从x2(0,i) -> y2(Width * Size, i)
	}

	moveDir = oldmove = 'd';			//初始化默认蛇行进方向朝右

	blocks[Width / 2][Height / 2] = 1;				/*正中间画蛇头,蛇为赋值的方格
													0则为空白区域*/
	for (i = 1; i < 4; i++) {
		blocks[Width / 2 - i][Height / 2] = i + 1;	//y坐标不变,更改x坐标,在蛇头后方画蛇身
	}

	srand(time(0));									//srand函数产生一个时间种子,从而达到真正的随机效果
	fx = rand() % (Width - 1) + 1;					//随机数除39取余并+1,则为食物所生成的格子x坐标
	fy = rand() % (Height - 1) + 1;					//随机数除取余并+1,则为食物所生成的格子y坐标
}	   

void show() {			
	cleardevice();
	for (int i = 0; i < Width; i++) {				//遍历所有方格,更新蛇的颜色
		for (int j = 1; j < Height; j++) {
			if (blocks[i][j] != 0) {
				setfillcolor(HSVtoRGB(blocks[i][j] * 10, 0.9, 1));	//HSV转RGB颜色,色调H 0°->360°,此处设置每长一个蛇身,提升10°色调,饱和度0.9,明度1
			}else{
				setfillcolor(CYAN);					//否则更新为正常背景颜色
			}
			fillrectangle(i * Size, j * Size, (i + 1) * Size, (j + 1) * Size);		//填充,(参数为左上角和右下角坐标)
		}
	}
	setfillcolor(LIGHTGREEN);						//食物颜色
	fillrectangle(fx * Size, fy * Size, (fx + 1) * Size, (fy + 1) * Size);

	ShowWord();

	FlushBatchDraw();				/*BeginBatchDraw执行后,任何绘图操作都将暂时不输出到绘图窗口上
								直到执行 FlushBatchDraw 或 EndBatchDraw 才将之前的绘图输出。*/
}

void ShowWord() {
	if (failure) {
		settextcolor(LIGHTRED);						//设置字体颜色
		settextstyle(80, 0, _T("宋体"));				//设置字体样式
		setbkmode(TRANSPARENT);
		outtextxy(240, 220, "游戏失败");
		settextstyle(40, 0, _T("宋体"));
		sprintf(num, "%d", score);						//将int转换为char并存入num中
		outtextxy(260, 360, "分数:");					//显示的字体及坐标
		outtextxy(380, 360, num);
	}
	else {												//②
		settextcolor(BLACK);							//设置分数颜色
		settextstyle(25, 0, _T("隶书"));				//设置字体样式
		setbkmode(TRANSPARENT);							//设置当前设备图案填充和文字输出时的背景模式,THANSPARENT为透明背景
		sprintf(num, "%d", score);						//将int转换为char并存入num中
		outtextxy(860, 40, "分数:");					//显示的字体及坐标
		outtextxy(940, 42, num);
		outtextxy(845, 73, "最高分:");
		sprintf(best, "%d", max);
		outtextxy(940, 75, best);
	}
}
void readscore() {										//③
	FILE* fpread = fopen("score.txt", "r");				//以只读的方式打开文件
	if (fpread == NULL) {
		return;
	}
	fscanf(fpread, "%d", &max);
	fclose(fpread);
}

void writescore() {
	FILE* fpWrite = fopen("score.txt", "w");			//"w"打开并写入文本文件.(若不存在则新建,反之,则从头写,覆盖原内容)
	if (fpWrite == NULL) {
		return ;
	}
	fprintf(fpWrite, "%d", score);
	fclose(fpWrite);				
}

void WithInput() {
	if (_kbhit() && failure == 0) {
		//键盘输入控制蛇的方向
		char input = _getch();

		if (input == 'a' || input == 's' || input == 'd' || input == 'w') {
			moveDir = input;
			//设定规则:当向某一方向行动时,按下反向键不起作用(防止误触导致判断为咬到蛇身游戏失败),强制将按下的反向键变为当前运动方向
			if (moveDir == 'a' && oldmove == 'd') {
				moveDir = 'd';
			}
			else if (moveDir == 's' && oldmove == 'w') {
				moveDir = 'w';
			}
			else if (moveDir == 'd' && oldmove == 'a') {
				moveDir = 'a';
			}
			else if (moveDir == 'w' && oldmove == 's') {
				moveDir = 's';
			}
			else {
				oldmove = input;
			}
			movesnake();
		}
	}
}

void WithoutInput() {
	
	if (failure) {				//先判断是否失败,失败则返回
		return;
	}
	//Sleep(100);				//更新速度控制蛇的移动速度,但使用sleep会产生键盘控制与画面的延迟,所以不使用
	//movesnake();
	static int speed = 1;		//设置一个静态变量speed,利用循环特定次数来触发movesnake函数
	speed++;
	if (speed == addspeed) {	//每15帧移动一次,同时实现长按方向键加快蛇的移动速度
		movesnake();
		speed = 1;
	}
}

void movesnake() {
	int i, j;
	//对蛇进行更新,蛇每个格数值都+1,以便后面预备一个数值为1的新蛇头,当吃到食物时,新蛇头改变颜色加入蛇身中
	for (i = 0; i < Width; i++) {
		for (j = 0; j < Height; j++) {
			if (blocks[i][j] != 0) {
				blocks[i][j]++;
			}
		}
	}

	int oldhx, oldhy, oldtx, oldty;			//旧蛇头和旧蛇尾的坐标
	int tailblock = 0;
	for (i = 0; i < Width; i++) {
		for (j = 0; j < Height; j++) {
			if (tailblock < blocks[i][j]) {
				tailblock = blocks[i][j];	//遍历找出最大值即为蛇尾
				oldtx = i;
				oldty = j;
			}
			if (blocks[i][j]==2) {			//寻找旧蛇头
				oldhx = i;
				oldhy = j;
			}
		}
	}
	//根据蛇的运动方向来赋值新蛇头的xy坐标
	int newhx = oldhx, newhy = oldhy;		//定义新蛇头
	switch (moveDir) {
	case'a':
		newhx -= 1;
		break;
	case's':
		newhy += 1;
		break;
	case'd':
		newhx += 1;
		break;
	case'w':
		newhy -= 1;
		break;
	}
	//判断游戏是否失败
	if (newhx >= Width || newhx < 0 || newhy >= Height || newhy < 0 || blocks[newhx][newhy] != 0) {
		failure = 1;
		return;
	}
	//令蛇头方格值为1
	blocks[newhx][newhy] = 1;
	//对吃到食物以及蛇尾的处理				⑤
	if (newhx == fx && newhy == fy) {		//吃到食物,重新随机数生成新食物坐标
		score = score + k;					//吃到食物分数+k
		if (score % 2 == 0) {				//通过判断吃食物的数量来叠加奖励分
			k = k + 1;
		}

		if (score > max) {					//与最高分判断,条件成立才能覆盖最高分
			writescore();					//写入最高分
		}
											//④
		if (score) {						//“加速”判断,通过判断分数增大的取值,加快蛇的运动速度,score不为0时进入该判断语句
			if (score % 2 == 0) {			//便于测试结果明显,设置每吃2个食物,蛇速度加快1帧
				addspeed--;
			}
		}
		fx = rand() % (Width - 1) + 1;		
		fy = rand() % (Height - 1) + 1;
	}else{									//未吃到食物
		blocks[oldtx][oldty] = 0;
	}


}

void drawmenu() {
	MOUSEMSG m;					//定义结构体鼠标m
	initgraph(600, 600);		//定义画布大小
	setbkcolor(CYAN);			//设置背景颜色
	cleardevice();				//使用当前背景色清空绘图设备,类似system(cls)的刷新
	setfillcolor(WHITE);	//方框颜色

	fillrectangle(140, 50, 460, 170);			//矩形左上角xy坐标和右下角xy坐标
	fillrectangle(120, 220, 480, 350);			//矩形左上角xy坐标和右下角xy坐标
	fillrectangle(100, 400, 500, 540);			//矩形左上角xy坐标和右下角xy坐标

	settextcolor(BLACK);						//设置字体颜色
	settextstyle(50, 0, _T("楷体"));			//设置字体格式
	setbkmode(TRANSPARENT);						//去除文字背景

	outtextxy(200, 85, "开始游戏");				//文字输出位置的xy坐标
	outtextxy(200, 260, "查看规则");
	outtextxy(200, 445, "退出游戏");

	while (1) {
		m = GetMouseMsg();						//获取一个鼠标消息
		if (m.x >= 140 && m.x <= 460 && m.y >= 50 && m.y <= 170) {		//判断鼠标点击的位置
			if (m.uMsg == WM_LBUTTONDOWN) {		//当鼠标按下左键
				gamestart();					//开始游戏
			}
		}
		else if (m.x >= 120 && m.x <= 480 && m.y >= 220 && m.y <= 350) {
			if (m.uMsg == WM_LBUTTONDOWN) {		//当鼠标按下左键
				seerule();					//查看规则
			}
		}
		else if (m.x >= 100 && m.x <= 500 && m.y >= 400 && m.y <= 540) {
			if (m.uMsg == WM_LBUTTONDOWN) {		//当鼠标按下左键
				back();					//关闭菜单退出游戏
			}
		}
	}
}

void gamestart() {
	readscore();		//读取最高分
	initGame();			//游戏初始化
	while (1) {			//循环进行界面实时刷新,直至游戏判定失败
		show();			//界面显示
		WithoutInput();	//先调用与输入无关的更新
		WithInput();	
	}
}

void seerule() {
	MOUSEMSG m;					//定义结构体鼠标m

	readscore();				//读取历史最高分

	initgraph(600, 600);		//定义画布大小
	setbkcolor(CYAN);			//设置背景颜色
	cleardevice();				//使用当前背景色清空绘图设备,类似system(cls)的刷新
	setfillcolor(WHITE);	//方框颜色

	fillrectangle(100, 400, 500, 540);			//矩形左上角xy坐标和右下角xy坐标

	settextcolor(BLACK);						//设置字体颜色
	settextstyle(50, 0, _T("楷体"));			//设置字体格式
	setbkmode(TRANSPARENT);						//去除文字背景
	outtextxy(200, 445, "返回菜单");

	settextcolor(BLACK);						//设置字体颜色
	settextstyle(30, 0, _T("楷体"));			//设置字体格式
	setbkmode(TRANSPARENT);						//去除文字背景
	outtextxy(45, 30, "WASD控制蛇移动,长按方向键可加速移动");
	outtextxy(45, 80, "碰到墙壁游戏失败");
	outtextxy(45, 130, "吃的食物越多,分数奖励越高");
	outtextxy(45, 180, "历史最高分:");
	sprintf(best, "%d", max);
	outtextxy(220, 180, best);



	while (1) {
		m = GetMouseMsg();						//获取一个鼠标消息
		if (m.x >= 100 && m.x <= 500 && m.y >= 400 && m.y <= 540) {
			if (m.uMsg == WM_LBUTTONDOWN) {		//当鼠标按下左键
				drawmenu();					//返回主菜单
			}
		}
	}
}

void back() {
	closegraph();		//关闭画面
	exit(0);			//退出程序
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/678670.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mac5款高效实用软件,值得推荐

目录 1.MarginNote 3&#xff1a;阅读批注学习笔记软件 2.iShot&#xff1a;Mac截图、长截图、带壳截图、贴图、标注、取色、录屏、录音、OCR、翻译&#xff0c;合集工具 3.KeyCastr-实时显示按下的按键 4.MindNode-超美观的思维导图 5.One Switch&#xff1a;系统设置一键…

CopyOnWriteArrayList源码

介绍 CopyOnWriteArrayList是Java并发包中提供的一个并发容器&#xff0c;它是个线程安全且读操作无锁的ArrayList&#xff0c;写操作则通过创建底层数组的新副本来实现&#xff0c;是一种读写分离的并发策略 在保证并发读取的前提下&#xff0c;确保了写入时的线程安全&…

百度 RT-DETR : 在实时目标检测上击败所有 YOLO !

论文地址&#xff1a;https://arxiv.org/abs/2304.08069 代码地址&#xff1a;https://github.com/PaddlePaddle/PaddleDetection 最近&#xff0c;基于端到端的 Transformer 检测器&#xff08;DETRs&#xff09;取得了显著的性能。然而&#xff0c;DETRs 的高计算成本问题尚…

chatgpt赋能python:Python的加减乘除使用指南

Python的加减乘除使用指南 Python是一种高级编程语言&#xff0c;其数学计算库和处理数值数据的能力使其成为科学计算&#xff0c;数据分析和机器学习领域的首选语言之一。在Python中&#xff0c;加减乘除是最基本和常用的四种数学计算操作。在本篇文章中&#xff0c;我们将介…

pyqt的学习(三)----鼠标点击和按键处理

QmyChartView 类的说明 QChart 和 QChartView 是基于 Graphics View 结构的绘图类。要对一个 QChart 图表进行鼠 标和按键操作&#xff0c;需要在 QChartView 类里对鼠标和按键事件进行处理&#xff0c;这就需要自定义一个 从 QChartView 继承的类。 QmyChartView 类是从 QC…

津津乐道设计模式 - 策略模式详解(以女友购物策略让你彻底明白)

&#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Micro麦可乐的博客 &#x1f425;《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程&#xff0c;入门到实战 &#x1f33a;《RabbitMQ》…

Git工具【系统学习】

第一章 Git快速入门 1.1 Git概述 Git是一个免费的&#xff0c;开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小型或大型的各种项目。Git易于学习&#xff0c;占用空间小&#xff0c;性能快得惊人。 1.2 SCM概述 SCM&#xff08;Software Configuration Managem…

Deepin Community Live CD New Kernel——自带6.3.8内核的镜像和apt源

镜像介绍 此镜像属于 Deepin Community Live CD 系列&#xff08;Deepin Community Live CD 简称为 DCLC&#xff0c;Deepin Community Live CD 是什么&#xff1f;传送门&#xff1a;https://bbs.deepin.org/post/242933&#xff09;&#xff0c;New Kernel 系列镜像旨在可以…

chatgpt赋能python:Python的下载流程

Python的下载流程 Python是一款流行的编程语言&#xff0c;其掌握程度在当今计算机科学领域越来越受到重视。在本文中&#xff0c;我们将探讨Python的下载流程&#xff0c;为初学者提供一些有用的信息。特别是&#xff0c;我们将着重介绍如何在Windows操作系统上下载Python。 …

Golang每日一练(leetDay0105) 超级丑数、右侧小于当前元素的个数

目录 313. 超级丑数 Super Ugly Number &#x1f31f;&#x1f31f; 315. 计算右侧小于当前元素的个数 Count-of-smaller-numbers-after-self &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一练…

chatgpt赋能python:Python下载安装教程

Python下载安装教程 Python是一种高级编程语言&#xff0c;具有简单易学、强大多样的特点&#xff0c;不仅可以用来开发网站、应用程序、游戏&#xff0c;还可以用于数据科学、机器学习、人工智能等领域&#xff0c;被广泛应用于各行各业。 本文将为您提供详细的Python下载安…

MongoDB简介

目录 1、NoSQL概述 2、什么是MongoDB 3、MongoDB特点 一、MongoDB安装&#xff08;docker方式&#xff09; 二、MongoDB安装&#xff08;普通方式&#xff09; 三、MongoDB 概念解析 1、NoSQL概述 NoSQL(NoSQL Not Only SQL)&#xff0c;意即反SQL运动&#xff0c;指的是…

FcaNet: Frequency Channel Attention Networks论文总结

论文&#xff1a;https://arxiv.org/abs/2012.11879 中文版&#xff1a;FcaNet: Frequency Channel Attention Networks 源码&#xff1a;https://github.com/cfzd/FcaNet或https://gitee.com/yasuo_hao/FcaNet 一、论文背景和出发点 问题&#xff1a;许多工作都集中在如何设计…

【T+】安装畅捷通T+提示安装向导找不到环境检测工具,是否手动选择环境检测工具文件夹。

【问题描述】 在windows server 2008r2系统环境下&#xff0c; 安装畅捷通T专属云标准版18.0软件的时候&#xff0c;提示&#xff1a; 安装向导找不到环境检测工具&#xff0c;是否手动选择环境检测工具文件夹&#xff08;CheckEnvironment&#xff09; 点击【是】手动选择&…

leetcode数据库题第六弹

leetcode数据库题第六弹 626. 换座位1280. 学生们参加各科测试的次数1321. 餐馆营业额变化增长1327. 列出指定时间段内所有的下单产品1341. 电影评分1378. 使用唯一标识码替换员工ID1393. 股票的资本损益1407. 排名靠前的旅行者1484. 按日期分组销售产品1517. 查找拥有有效邮箱…

数字基带传输

常用码型&#xff1a; 为了适应信道的传输&#xff0c;传输码型必须具备以下基本特性&#xff1a; 1&#xff09;无直流、很少的低频分量&#xff1b; 2&#xff09;含有码元定时信息&#xff1b; 3&#xff09;主瓣宽度窄&#xff1b; 4&#xff09;适用于各种信源的…

ChatGPT从入门到精通,一站式掌握办公自动化/爬虫/数据分析和可视

课程名称适应人群ChatGPT从入门到精通&#xff0c;一站式掌握办公自动化/爬虫/数据分析和可视 全面AI时代就在转角&#xff0c;道路已经铺好了“局外人”or“先行者”就在此刻等你决定 1、对ChatGPT感兴趣并希望有人手把手教学的新手 2、希望了解GPT各类应用抓住未来风口 3、希…

【软件设计师暴击考点】UML知识高频考点暴击系列

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;软件…

【Android Framework系列】第2章 Binder机制大全

1 Binder简介 1.1 什么是Binder Binder是Android中主要的跨进程通信方式。Android系统中&#xff0c;每个应用程序是由Android的Activity&#xff0c;Service&#xff0c;BroadCast&#xff0c;ContentProvider这四剑客中一个或多个组合而成&#xff0c;这四剑客所涉及的多进程…

【瑞萨RA_FSP】IWDT——独立看门狗定时器

文章目录 一、IWDT简介二、IWDT功能框图剖析1. IWDT 时钟源(1) 计数器时钟(2) 独立看门狗超时时间计算 2. IWDT 模块电路功能讲解3. 独立看门狗&#xff08;IWDT&#xff09;与看门狗&#xff08;WDT&#xff09;功能对比4. 怎么使用IWDT 三、IWDT实验1. 硬件设计2. 文件结构3.…