扫雷(C 语言)

目录

  • 一、游戏设计分析
  • 二、各个步骤的代码实现
    • 1. 游戏菜单界面的实现
    • 2. 游戏初始化
    • 3. 开始扫雷
  • 三、完整代码
  • 四、总结

一、游戏设计分析

本次设计的扫雷游戏是展示一个 9 * 9 的棋盘,然后输入坐标进行判断,若是雷,则游戏结束,否则继续判断,直到排除所有雷,游戏胜利。然后选择退出或者重新开始游戏。

(1)游戏菜单界面实现
提供开始游戏和退出游戏两个选项,游戏结束后可以再次选择,直到退出游戏。
(2)游戏初始化
开始游戏后,初始化棋盘,随机设置地雷,然后显示棋盘。这里需要两个二维数组,一个用来显示棋盘,一个用来存储地雷的信息。
(3)开始扫雷
提示玩家输入坐标,然后检查坐标是否合法,最后判断位置是否为雷。若为雷,则游戏结束;若不为雷则计算周围地雷的个数,若周围地雷的个数不为 0,则显示将其显示在棋盘上;若周围地雷个数为 0,则使用刚才的方法继续检查周围的 8 个位置,以此类推,检查结束后把信息全部显示在棋盘上。然后继续下一次坐标输入,直到把所有的雷找出,游戏获胜。

上述需要计算输入坐标周围的的雷的个数,如果在该坐标在最边上一圈,那么会存在排查的坐标非法的情况。这里可以使用 11 * 11 的棋盘,然后通过把雷设置为字符 ‘1’,非雷设置为字符 ‘0’,当计算时把周围八个坐标相加然后减去 8 个字符 ‘0’ 即可。
(4)游戏结束或重新开始游戏

二、各个步骤的代码实现

1. 游戏菜单界面的实现

游戏菜单界面需要提供开始游戏和退出游戏两个选项,且玩完一局游戏之后可以选择再玩一局。在主函数使用一个循环来控制实现,如下:

(1)test.c 测试文件

// 头文件
#include "Mine.h"

int main()
{
	// 所需变量
	int select;
	// 选择
	do
	{
		// 菜单
		menu();
		// 输入
		scanf("%d", &select);
		// 判断
		switch (select)
		{
		case 1:
			printf("扫雷游戏\n");
			//Minesweeper_game();
			break;
		case 0:
			printf("游戏结束!\n");
			break;
		default:
			printf("输入错误,请重新输入!\n");
			break;
		}
	} while (select);

	return 0;
}

(2)Mine.h 头文件

// 头文件
#include <stdio.h>

// 函数声明
// 菜单
void menu();

(3)Mine.c 函数实现文件

// 头文件
#include "Mine.h"

// 函数定义
// 菜单
void menu()
{
	printf("*****************************************\n");
	printf("*************    1. play    *************\n");
	printf("*************    0. exit    *************\n");
	printf("*****************************************\n");
}

(4)代码运行效果:
在这里插入图片描述

2. 游戏初始化

游戏初始化需要显示棋盘,然后随机设置雷。这里需要使用两个数组,一个数组用来显示棋盘,另一个数组用来存储雷的信息。为了方便计算,两个数组都采用 11*11 的字符数组,初始棋盘使用符号 ‘*’,地雷使用字符 ‘1’,非地雷使用字符 ‘0’。数组大小使用在头文件中定义的符号常量,设计一个初始化函数 InitBoard() 和设置雷函数 SetMine(),还有显示棋盘函数 PrintBoard()。

InitBoard() 函数可以一次性传两个数组,也可以通过参数传递设置的值。SetMine() 函数需要使用随机数。PrintBoard() 函数显示的时候可以在左边和上面加上行号和列号,方便玩家输入坐标。

(1)test.c 测试文件
添加了扫雷游戏函数 Minesweeper_game()

// 头文件
#include "Mine.h"

int main()
{
	// 所需变量
	int select;
	// 选择
	do
	{
		// 菜单
		menu();
		// 输入
		scanf("%d", &select);
		// 判断
		switch (select)
		{
		case 1:
			Minesweeper_game();  // 扫雷游戏
			break;
		case 0:
			printf("游戏结束!\n");
			break;
		default:
			printf("输入错误,请重新输入!\n");
			break;
		}
	} while (select);

	return 0;
}

(2)Mine.h 头文件

// 头文件
#include <stdio.h>

// 常量声明
#define ROW 9
#define COL 9

#define ROWS ROW+2
#define COLS COL+2

// 函数声明
// 菜单
void menu();

// 初始化棋盘
void InitBoard(char Board[ROWS][COLS], int rows, int cols, char set);

// 设置雷
void SetMine(char Board[ROWS][COLS], int row, int col);

// 显示棋盘
void PrintBoard(char Board[ROWS][COLS], int row, int col);

// 扫雷游戏
void Minesweeper_game();

(3)Mine.c 函数实现文件

// 初始化棋盘
void InitBoard(char Board[ROWS][COLS], int rows, int cols, char set)
{
	int i;
	for (i = 0; i < rows; ++i)
	{
		int j;
		for (j = 0; j < cols; ++j)
		{
			Board[i][j] = set;
		}
	}
}

// 设置雷
void SetMine(char Board[ROWS][COLS], int row, int col)
{
	// 所需变量
	int x, y;  // 雷的坐标
	int num = MINE_COUNT;  // 雷的数量
	// 设置雷
	while (num)
	{
		// 随机设置坐标值
		x = rand() % row + 1;  // 11 * 11 实际坐标 1 - 9
		y = rand() % col + 1;
		// 检查坐标是否重复
		if (Board[x][y] == '0')
		{
			Board[x][y] = '1';
			--num;
		}
	}
}

// 显示棋盘
void PrintBoard(char Board[ROWS][COLS], int row, int col)
{
	// 分界线
	printf("-----------------------扫雷----------------------\n");
	// 列号
	printf("  ");
	int j;
	for (j = 0; j < col; ++j)
	{
		printf("%d ", j + 1);
	}
	printf("\n");
	// 棋盘
	int i;
	for (i = 0; i < row; ++i)
	{
		// 列号
		printf("%d ", i + 1);
		for (j = 0; j < col; ++j)
		{
			printf("%c ", Board[i+1][j+1]);
		}
		// 下一行
		printf("\n");
	}
	// 分界线
	printf("-----------------------扫雷----------------------\n");
}

// 扫雷游戏
void Minesweeper_game()
{
	// 创建两个棋盘
	char board[ROWS][COLS];
	char mine[ROWS][COLS];
	// 初始化棋盘
	InitBoard(board, ROWS, COLS, '*');
	printf("初始化两个数组:\n");  // 删除
	PrintBoard(board, ROW, COL);  // 删除
	InitBoard(mine, ROWS, COLS, '0');
	PrintBoard(mine, ROW, COL);  // 删除
	// 设置雷
	SetMine(mine, ROW, COL);
	printf("雷的信息:\n");  // 删除
	PrintBoard(mine, ROW, COL);  // 删除
}

上述标记了删除的语句都是不需要的,这是作者写完代码用来检测的。

(4)代码运行效果
在这里插入图片描述

3. 开始扫雷

开始扫雷,设计一个函数 find(),要求玩家输入坐标,检查该坐标是否合法,然后判断该位置是否为雷,是雷则游戏结束,不是雷则使用函数 calc_mine() 计算周围一圈的雷的个数。如果周围一圈没有雷,则按照刚才的步骤检查周围一圈,实现函数 calc_mine() 递归。然后继续扫雷,直到找出所有的雷。

函数 calc_mine() 只在 find() 函数中使用,可以设置为 Mine.c 函数实现文件中的静态函数。判断游戏结束也需要使用一个变量,这里使用一个全局变量 REAMIN 来进行控制,当 REAMIN 的值为棋子总数减去雷数时,则排除所有雷,游戏结束。

代码测试时,可以一个一个功能进行测试,一个功能完成无误后再进入下一个。作者是全部测试好了才放上来的。

(1)Mine.h 头文件

// ...

// 找雷
void find(char Board[ROWS][COLS], int row, int col);

// 扫雷游戏
void Minesweeper_game();

(2)Mine.c 函数实现文件

// 计算周围的雷
void calc_mine(char Board[ROWS][COLS], char Mine[ROWS][COLS], int row, int col, int x, int y)
{
	// 坐标非法或者已经排查或该位置为雷则退出
	if (x < 1 || x > 9 || y < 1 || y > 9 || Board[x][y] != '*' || Mine[x][y] != '0')
		return;
	// 所需变量
	int num = 0;
	int i;
	for (i = x - 1; i <= x + 1; ++i)
	{
		int j;
		for (j = y - 1; j <= y + 1; ++j)
		{
			num += Mine[i][j];
		}
	}
	// 加的是字符 '0' 所以要减去
	num = num - 9 * '0';
	// 排雷 +1
	++REMAIN;
	if (num)
	{
		Board[x][y] = num + '0';
	}
	else
	{
		Board[x][y] = ' ';

		// 如果该坐标周围没雷,则对其周围八个坐标进行检查,形成递归
		for (i = x - 1; i <= x + 1; ++i)
		{
			int j;
			for (j = y - 1; j <= y + 1; ++j)
			{
				calc_mine(Board, Mine, row, col, i, j);
			}
		}
	}
}

// 找雷
int find(char Board[ROWS][COLS], char Mine[ROWS][COLS], int row, int col)
{
	// 所需变量
	int x, y;
	// 输入排查坐标
	while (1)
	{
		printf("请输入排雷坐标:");
		scanf("%d %d", &x, &y);
		// 判断坐标是否合法
		if (Board[x][y] != '*')
		{
			printf("该坐标已被排查!\n");
			continue;
		}
		if (x >= 1 && x <= row && y >= 1 && y <= col)
		{
			if (Mine[x][y] == '1')
			{
				printf("很遗憾,你被炸死了!\n");
				printf("以下是本局雷的信息\n");
				return 0;
			}
			else
			{
				calc_mine(Board, Mine, row, col, x, y);
				return 1;
			}
		}
	}
}

// 扫雷游戏
void Minesweeper_game()
{
	// 重置
	REMAIN = 0;
	// 创建两个棋盘
	char board[ROWS][COLS];
	char mine[ROWS][COLS];
	// 初始化棋盘
	InitBoard(board, ROWS, COLS, '*');
	InitBoard(mine, ROWS, COLS, '0');
	// 设置雷
	SetMine(mine, ROW, COL);
	int ret = 0;
	while (REMAIN != ROW * COL - MINE_COUNT)
	{
		// 显示棋盘
		PrintBoard(board, ROW, COL);
		// 排雷
		ret = find(board, mine, ROW, COL);
		// 如果是雷,则显示雷的信息,游戏结束
		if (!ret)
		{
			PrintBoard(mine, ROW, COL);
			break;
		}
	}
	// 判断
	if (REMAIN == ROW * COL - MINE_COUNT)\
	{
		printf("恭喜你排雷成功,游戏结束!\n");
		printf("以下是本局雷的信息:\n");
		PrintBoard(mine, ROW, COL);
	}
}

(3)代码运行效果:
下图是完整代码运行效果,一整局游戏的运行图:
在这里插入图片描述

三、完整代码

完整代码分为三个文件:头文件 Mine.h,测试文件 test.c,函数实现文件 Mine.c

头文件 Mine.h

#pragma once

// 头文件
#include <stdio.h>
#include <stdlib.h>

// 常量声明
#define ROW 9
#define COL 9

#define ROWS ROW+2
#define COLS COL+2

#define MINE_COUNT 10

// 函数声明
// 菜单
void menu();

// 初始化棋盘
void InitBoard(char Board[ROWS][COLS], int rows, int cols, char set);

// 设置雷
void SetMine(char Board[ROWS][COLS], int row, int col);

// 显示棋盘
void PrintBoard(char Board[ROWS][COLS], int row, int col);

// 找雷
int find(char Board[ROWS][COLS],char Mine[ROWS][COLS], int row, int col);

// 扫雷游戏
void Minesweeper_game();

测试文件 test.c

// 头文件
#include "Mine.h"
#include <time.h>

int main()
{
	// 设置随机数种子
	srand((unsigned)time(0));
	// 所需变量
	int select;
	// 选择
	do
	{
		// 菜单
		menu();
		// 输入
		scanf("%d", &select);
		// 判断
		switch (select)
		{
		case 1:
			Minesweeper_game();  // 扫雷游戏
			break;
		case 0:
			printf("游戏结束!\n");
			break;
		default:
			printf("输入错误,请重新输入!\n");
			break;
		}
	} while (select);

	return 0;
}

函数实现文件 Mine.c

// 头文件
#include "Mine.h"

// 全局静态变量
static REMAIN = 0;

// 函数定义
// 菜单
void menu()
{
	printf("*****************************************\n");
	printf("*************    1. play    *************\n");
	printf("*************    0. exit    *************\n");
	printf("*****************************************\n");
}

// 初始化棋盘
void InitBoard(char Board[ROWS][COLS], int rows, int cols, char set)
{
	int i;
	for (i = 0; i < rows; ++i)
	{
		int j;
		for (j = 0; j < cols; ++j)
		{
			Board[i][j] = set;
		}
	}
}

// 设置雷
void SetMine(char Board[ROWS][COLS], int row, int col)
{
	// 所需变量
	int x, y;  // 雷的坐标
	int num = MINE_COUNT;  // 雷的数量
	// 设置雷
	while (num)
	{
		// 随机设置坐标值
		x = rand() % row + 1;  // 11 * 11 实际坐标 1 - 9
		y = rand() % col + 1;
		// 检查坐标是否重复
		if (Board[x][y] == '0')
		{
			Board[x][y] = '1';
			--num;
		}
	}
}

// 显示棋盘
void PrintBoard(char Board[ROWS][COLS], int row, int col)
{
	// 分界线
	printf("-----------------------扫雷----------------------\n");
	// 列号
	printf("  ");
	int j;
	for (j = 0; j < col; ++j)
	{
		printf("%d ", j + 1);
	}
	printf("\n");
	// 棋盘
	int i;
	for (i = 0; i < row; ++i)
	{
		// 列号
		printf("%d ", i + 1);
		for (j = 0; j < col; ++j)
		{
			printf("%c ", Board[i+1][j+1]);
		}
		// 下一行
		printf("\n");
	}
	// 分界线
	printf("-----------------------扫雷----------------------\n");
}

// 计算周围的雷
void calc_mine(char Board[ROWS][COLS], char Mine[ROWS][COLS], int row, int col, int x, int y)
{
	// 坐标非法或者已经排查或该位置为雷则退出
	if (x < 1 || x > 9 || y < 1 || y > 9 || Board[x][y] != '*' || Mine[x][y] != '0')
		return;
	// 所需变量
	int num = 0;
	int i;
	for (i = x - 1; i <= x + 1; ++i)
	{
		int j;
		for (j = y - 1; j <= y + 1; ++j)
		{
			num += Mine[i][j];
		}
	}
	// 加的是字符 '0' 所以要减去
	num = num - 9 * '0';
	// 排雷 +1
	++REMAIN;
	if (num)
	{
		Board[x][y] = num + '0';
	}
	else
	{
		Board[x][y] = ' ';

		// 如果该坐标周围没雷,则对其周围八个坐标进行检查,形成递归
		for (i = x - 1; i <= x + 1; ++i)
		{
			int j;
			for (j = y - 1; j <= y + 1; ++j)
			{
				calc_mine(Board, Mine, row, col, i, j);
			}
		}
	}
}

// 找雷
int find(char Board[ROWS][COLS], char Mine[ROWS][COLS], int row, int col)
{
	// 所需变量
	int x, y;
	// 输入排查坐标
	while (1)
	{
		printf("请输入排雷坐标:");
		scanf("%d %d", &x, &y);
		// 判断坐标是否合法
		if (Board[x][y] != '*')
		{
			printf("该坐标已被排查!\n");
			continue;
		}
		if (x >= 1 && x <= row && y >= 1 && y <= col)
		{
			if (Mine[x][y] == '1')
			{
				printf("很遗憾,你被炸死了!\n");
				printf("以下是本局雷的信息\n");
				return 0;
			}
			else
			{
				calc_mine(Board, Mine, row, col, x, y);
				return 1;
			}
		}
	}
}

// 扫雷游戏
void Minesweeper_game()
{
	// 重置
	REMAIN = 0;
	// 创建两个棋盘
	char board[ROWS][COLS];
	char mine[ROWS][COLS];
	// 初始化棋盘
	InitBoard(board, ROWS, COLS, '*');
	InitBoard(mine, ROWS, COLS, '0');
	// 设置雷
	SetMine(mine, ROW, COL);
	int ret = 0;
	while (REMAIN != ROW * COL - MINE_COUNT)
	{
		// 显示棋盘
		PrintBoard(board, ROW, COL);
		// 排雷
		ret = find(board, mine, ROW, COL);
		// 如果是雷,则显示雷的信息,游戏结束
		if (!ret)
		{
			PrintBoard(mine, ROW, COL);
			break;
		}
	}
	// 判断
	if (REMAIN == ROW * COL - MINE_COUNT)\
	{
		printf("恭喜你排雷成功,游戏结束!\n");
		printf("以下是本局雷的信息:\n");
		PrintBoard(mine, ROW, COL);
	}
}

四、总结

本次扫雷游戏的代码实现,总体来说还比较可以。基本功能均实现,游戏也能正常进行。本游戏还有许多可以提升的地方,比如:代码的优化,雷的标记,难度的选择等等。

本代码稍微难一点的地方在于排查坐标周围地雷数的函数 calc_mine() 的递归,需要明确何时需要递归,和递归的结束条件。

复习一下递归需要满足两个条件:
(1)需要结束条件
(2)每次递归都更加靠近这个结束条件

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis拒绝连接问题分析与解决方案

目录 前言1. 问题描述2. Redis拒绝连接的常见原因分析2.1 Redis服务未启动2.2 Redis配置中的绑定地址问题2.3 防火墙或安全组问题2.4 Redis连接池耗尽2.5 Redis服务器负载过高2.6 权限配置问题 3. 深度解决方案和优化建议4. 总结 前言 在分布式系统中&#xff0c;Redis作为高性…

Unity之XR Interaction Toolkit 射线拖拽3DUI

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、想实现的功能二、实现原理1.UI挂在XRGrabInteractable、刚体、BoxCollder2.修改刚体属性3.加BoxCollder 总结 前言 VR项目里正常情况有放置两种3DUI的方式…

Git之代已修改文件的目录高亮设置

不管Android Studio或者Idea&#xff0c;进入Setting 选择如图所示&#xff0c;并进行勾选 就可以高亮了。

2023年10月自考《数据库系统原理》04735试题

目录 一.选择题 二.填空题 三.设计题 四.简答题 五.综合体 一.选择题 1.下列属于数据库中存储数据基本特点是 (书中)P28页 A.冗余大 B.无组织 C.不可共享 D.永久存储 2.浏览器/服务器结构描述不正确的是 (书中)P36页 A.三层客户/服务器结构 B.基于Web引用的客户/服务器…

AWD入门

一、简介 AWD(Attack With Defense&#xff0c;攻防兼备)模式。你需要在一场比赛里要扮演攻击方和防守方&#xff0c;攻者得分&#xff0c;失守者会被扣分。也就是说攻击别人的靶机可以获取 Flag 分数时&#xff0c;别人会被扣分&#xff0c;同时你也要保护自己的主机不被别人…

武汉正向科技|焦炉移动机车连锁控制系统的介绍

焦炉车辆连锁控制系统是采用格雷母线定位技术&#xff0c;无线数据传输技术以及计算机技术&#xff0c;实现推焦车、拦焦车、熄焦车、装煤车、导烟车的集中监控和系统管理&#xff0c;以及车间作业计划管理&#xff0c;作业实绩管理&#xff0c;作业联锁控制及安全控制等。 焦炉…

Unlock the Power of Frozen LLMs in Knowledge Graph Completion

文章目录 题目摘要引言方法实验相关工作结论局限性附录 题目 在知识图完成中释放冻结LLM的力量 论文地址&#xff1a;https://arxiv.org/abs/2408.06787 摘要 传统的知识图完成(KGC)方法仅仅依赖于结构信息&#xff0c;难以克服知识图固有的稀疏性。大型语言模型(LLM)通过强大…

3dsMax添加天空盒

点击渲染&#xff0c;环境 &#xff0c; 点击位图 找到要设置的天空HDR&#xff0c;可以使用HDR(EXR)贴图 一个可以下载HDR贴图的网站 https://polyhaven.com/hdris在渲染的时候不要使用使用微软输入法&#xff0c;3dsmax会卡死&#xff0c; 在渲染的时候不要使用使用微软…

2013年国赛高教杯数学建模D题公共自行车服务系统解题全过程文档及程序

2013年国赛高教杯数学建模 D题 公共自行车服务系统 公共自行车作为一种低碳、环保、节能、健康的出行方式&#xff0c;正在全国许多城市迅速推广与普及。在公共自行车服务系统中&#xff0c;自行车租赁的站点位置及各站点自行车锁桩和自行车数量的配置&#xff0c;对系统的运行…

MySQL 9从入门到性能优化-二进制日志

【图书推荐】《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;》-CSDN博客 《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…

python车牌号OCR识别(centos版)

在实际应用中&#xff0c;车牌号的识别(OCR)是一个非常重要的需求&#xff0c;尤其是在停车场管理、道路监控等场景中。本文将介绍如何在CentOS环境下&#xff0c;通过Docker容器&#xff0c;基于PaddleOCR来实现车牌号的识别。具体内容包括构建Docker镜像的步骤、相关依赖安装…

antd vue 输入框高亮设置关键字

<highlight-textareaplaceholder"请输入主诉"type"textarea"v-model"formModel.mainSuit":highlightKey"schema.componentProps.highlightKey"></highlight-textarea> 参考链接原生input&#xff0c;textarea demo地址 …

网站建设为什么要选择国内服务器

选择国内服务器进行网站建设&#xff0c;对于面向国内用户的企业来说&#xff0c;是一个明智的决策。以下是一些选择国内服务器的主要原因&#xff1a; 提升用户体验&#xff1a; 网站访问速度是用户体验的关键因素之一。由于物理距离较近&#xff0c;国内服务器通常能提供更快…

Linux_进程概念详解(续)_命令行参数_环境变量_进程地址空间

本篇文章是Linux_进程概念详解的续篇&#xff0c;请先阅读Linux_进程概念详解再来阅读本篇。 命令行参数 在C / C中&#xff0c;每个程序都必须有一个main函数&#xff0c;该函数有很多的版本&#xff0c;我们最常用的就是不带参数的版本&#xff0c;也就是下面第一条语句 i…

关于 文件操作详解 笔记 (含代码解析)

文件 磁盘&#xff08;硬盘&#xff09;上的⽂件是⽂件。 程序设计中&#xff0c;我们⼀般谈的⽂件有两种&#xff1a;程序⽂件、数据⽂件&#xff08;从⽂件功能的⻆度来分类 &#xff09; 程序⽂件 程序⽂件包括源程序⽂件&#xff08;后缀为.c&#xff09;,⽬标⽂件&#…

【测试】BUG篇——BUG

bug的概念 定义&#xff1a;⼀个计算机bug指在计算机程序中存在的⼀个错误(error)、缺陷(flaw)、疏忽(mistake)或者故障(fault)&#xff0c;这些bug使程序⽆法正确的运⾏。Bug产⽣于程序的源代码或者程序设计阶段的疏忽或者错误。 准确的来说&#xff1a; 当且仅当规格说明&am…

项目_C_Ncurses_Flappy bird小游戏

Ncurses库 概述 什么是Ncurses库&#xff1a; Ncurses是一个管理应用程序在字符终端显示的函数库&#xff0c;库中提供了创建窗口界面、移动光标、产生颜色、处理键盘按键等功能。 安装Ncurses库&#xff1a; sudo apt-get install libncurses5-dev 头文件与编译&#xf…

老人桌面 1.3.5|专为老人设计的便捷实用桌面应用

老人桌面是一款专为老人设计的便捷实用桌面应用&#xff0c;具有超大字体设计&#xff0c;符合老人视力水平&#xff0c;撞色简洁的应用界面&#xff0c;拯救老人视觉体验。此外&#xff0c;还提供了常用的实用小工具&#xff0c;让老人能够轻松使用手机。 大小&#xff1a;5.…

Oracle-19g数据库的安装

简介 Oracle是一家全球领先的数据库和云解决方案提供商。他们提供了一套完整的技术和产品&#xff0c;包括数据库管理系统、企业级应用程序、人工智能和机器学习工具等。Oracle的数据库管理系统是业界最受欢迎和广泛使用的数据库之一&#xff0c;它可以管理和存储大量结构化和…

界面耻辱纪念堂--可视元素03

更多的迹象表明&#xff0c;关于在程序里使用新的动态界面元素&#xff0c;微软的态度是不确定的&#xff0c;其中一个是仅仅需要对比一下Office97 里的“Coolbars”和“标准工具条”。Coolbar 按钮直到用户指针通过的时候才成为按钮&#xff08;否则是平的&#xff09;。 工具…