Uefi Application小游戏开发之猜箱子

news/2024/10/29 17:55:24/

小游戏之猜箱子

选择箱子个数  ,交换次数 ,交换速度等,将球丢入到一个箱子中,然后开始随机交换箱子,猜出球的位置

源代码如下:

#include <Uefi.h>
#include <Library/UefiLib.h>
#include <Library/ShellCEntryLib.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/UefiRuntimeServicesTableLib.h>
#include <stdio.h>
#include <Library/TimerLib.h>
#include <Library/DebugLib.h>
#define A 1664525
#define C 1013904223
#define M 4294967296UL 
static unsigned seed = 1;
CHAR8 a[50][50]={"------","+    +","+    +","+    +","------"};
int c,n,sudu;
BOOLEAN k[200]={0,1,0,0,0,0,0,0,0,0};
void Sleep(int Count)
{MicroSecondDelay(Count*1000);
}
void cls()
{gST->ConOut->ClearScreen (gST->ConOut);
}
void xy(int y,int x) 
{ gST->ConOut->SetCursorPosition ( gST->ConOut, x, y);
}
void out(int x,int y,BOOLEAN t)
{if (t)for (int i=0;i<5;i++,x++){xy(x,y);//DEBUG((DEBUG_ERROR, "x:%d y:%d.\n" ,x,y));for (int j=0;j<6;j++){Print (L"%c",(unsigned short )a[i][j]);}}elsefor (int i=0;i<5;i++,x++){xy(x,y);for (int j=0;j<6;j++)Print (L" ");}
}
void swap(int *x, int *y) {int temp = *x;*x = *y;*y = temp;
}
void yuan()
{for (int i=1;i<=n;i++){out (8,12*i-3,1);//DEBUG((DEBUG_ERROR, "12*i-3:%d.\n" ,12*i-3));}}
int my_abs(int x) {if (x < 0) {return -x;} else {return x;}
}
void dong()
{int a,b,i,t,temp;a=my_rand()%(n);a=my_abs(a)+1;b=my_rand()%(n);b=my_abs(b)+1;while (a==b){b=my_rand()%(n);b=my_abs(b)+1;}//((DEBUG_ERROR, "a:%d b:%d.\n" ,a,b));t=my_abs(12*a-12*b);//DEBUG((DEBUG_ERROR, "t:%d.\n" ,t));temp=k[a];k[a]=k[b];k[b]=temp;out (8,12*a-3,0);out (8,12*b-3,0);for (i=7;i>=1;i--){out (i,12*a-3,1);out (16-i,12*b-3,1);Sleep (sudu);out (i,12*a-3,0);out (16-i,12*b-3,0);}if (a>b)for (i=1;i<=t;i++){out (1,a*12-3-i,1);out (15,b*12-3+i,1);Sleep (sudu);out (1,a*12-3-i,0);out (15,b*12-3+i,0);}elsefor (i=1;i<=t;i++){out (15,b*12-3-i,1);out (1,a*12-3+i,1);Sleep (sudu);out (15,b*12-3-i,0);out (1,a*12-3+i,0);}for (i=1;i<=7;i++){out (16-i,12*a-3,1);out (i,12*b-3,1);Sleep (sudu);out (16-i,12*a-3,0);out (i,12*b-3,0);}yuan();
}void my_srand(unsigned int new_seed) {seed = new_seed;
}
unsigned int my_rand() {seed = (A * seed + C) % M;return (unsigned int)seed;
}
double my_round(double num) {return (num >= 0) ? (int)(num + 0.5) : (int)(num - 0.5);
}EFI_STATUSEFIAPICaiXInit(IN EFI_HANDLE        ImageHandle,IN EFI_SYSTEM_TABLE  *SystemTable)
{UINT8 in,d;EFI_INPUT_KEY Key;my_srand(0);xy(0,5);cls();Print (L"ball exchange count:select easy or diffcult 1 ~ 20  ( 1 eazy ,20 diffcult)\n");while (TRUE){if (gST->ConIn->ReadKeyStroke(gST->ConIn, &Key) == EFI_SUCCESS) {in= (UINT16)(Key.UnicodeChar)-48;Print(L"Key pressed: %d\n", in);Sleep (500);break;}}xy(1,5); if (in<1) {in=1;}if (in>20){in=20; }  c=in*3;Sleep (500); cls();xy(0,5);Print(L"ball count: Please Select Cup Count :3 ~ 6" );while (TRUE){if (gST->ConIn->ReadKeyStroke(gST->ConIn, &Key) == EFI_SUCCESS) {n= (UINT16)(Key.UnicodeChar)-48;Print(L"Key pressed: %d\n", n);Sleep (500);break;}}xy(1,5);if (n<3) n=3;if (n>10) n=4; sudu=5;cls();yuan();for (int i=1;i<=7;i++){xy(i,11); Print("+");Sleep (100);xy(i,11); Print(L" ");}for (int i=1;i<=c;i++){dong();}xy(20,20);Print(L"The rotation is finished, may I ask which cup the ball is in?");xy(22,20);while (TRUE){if (gST->ConIn->ReadKeyStroke(gST->ConIn, &Key) == EFI_SUCCESS) {in= (UINT16)(Key.UnicodeChar)-48;Print(L"Key pressed: %d\n", in);Sleep (500);break;}}for (int i=1;i<=n;i++)if (k[i]){d=i;break;}xy(24,20);if (in==d)Print(L"congratulat you are True");elsePrint(L"Unfortunately, the correct answer is %d" ,d);Sleep(1000);xy(30,100); return EFI_SUCCESS;
}

1.选择难度 交换次数2.选择难度 箱子个数3.开始交换4,交换完成后猜球的位置

基本函数介绍

1. Sleep(int Count)

这个函数用于暂停程序的执行一段时间。它使用 MicroSecondDelay 函数来实现延迟,延迟的时间是传入参数 Count 的值乘以 1000 微秒。

2. cls()

这个函数用于清除屏幕上的所有内容。它调用 UEFI 控制台输出协议的 ClearScreen 函数来实现。

3. xy(int y, int x)

这个函数用于设置控制台光标的当前位置。它调用 UEFI 控制台输出协议的 SetCursorPosition 函数来实现。

4. out(int x, int y, BOOLEAN t)

这个函数用于在指定位置输出或清除一个图形(由二维数组 a 定义)。如果参数 t 为 TRUE,则输出图形;如果为 FALSE,则清除该位置的内容。

6. yuan()

这个函数用于在屏幕上输出初始的图形排列。它调用 out 函数来输出每个图形。

7. my_abs(int x)

这个函数用于计算一个整数的绝对值。如果输入的整数小于 0,则返回其相反数;否则返回原数。

8. dong()

这个函数用于模拟图形的移动和交换。它随机选择两个图形,交换它们的位置,并在屏幕上显示移动的过程

9. my_srand(unsigned int new_seed)

这个函数用于初始化随机数生成器的种子。它将传入的 new_seed 值赋给全局变量 seed

10. my_rand()

这个函数用于生成一个伪随机数。它使用线性同余法(LCG)来生成随机数。


http://www.ppmy.cn/news/1542891.html

相关文章

pip 和 pipx 的主要区别?

特性pippipx用途用于安装Python库或命令行应用程序&#xff0c;可以安装带entry points的库专门用于安装和管理Python命令行工具&#xff0c;每个工具都在隔离的虚拟环境中运行虚拟环境不自动创建虚拟环境&#xff0c;需要手动使用 venv 或 virtualenv 创建自动为每个安装的工具…

PHP免杀详细讲解PHP免杀详细讲解

基础学习 可变参数 $_GET $_POST $_COOKIE $_REQUEST $_SERVER 其中的某些参数可控,如REQUESTMETHOD,QUERYSTRING,HTTPUSERAGENT等 session_id() 这个比较特殊,但是依然可以利用 $_FILE $GLOBALS getallheaders() get_defined_vars() get_defined_functions() fil…

无人机动态窗口路径规划算法!

一、算法原理 DWA算法将局部路径规划问题描述为速度矢量空间上的约束优化问题。它根据无人机的当前状态&#xff08;如位置、速度、加速度等&#xff09;和环境信息&#xff08;如障碍物位置、目标点位置等&#xff09;&#xff0c;在速度空间内采样多组线速度和角速度&#x…

MongoDB-Plus

MongoDB-Plus是一款功能强大的数据库工具&#xff0c;它基于MongoDB&#xff0c;提供了更丰富的功能和更便捷的操作方式。以下是一篇关于MongoDB-Plus轻松上手的详细指南&#xff0c;旨在帮助初学者快速掌握其安装、配置和基础操作。 一、MongoDB-Plus概述 MongoDB是一款由C编…

linux中各目录作用及介绍

目录 1 /usr 1 /usr /usr 是 Unix-like 操作系统中的一个重要目录之一&#xff0c;代表可共享的用户资源&#xff08;User System Resources&#xff09;或 Unix Software Resource&#xff08;UNIX 软件资源&#xff09;。 /usr 目录通常包含了系统的许多可共享资源&#xf…

docker 安装 PostgreSQL

参考链接 https://hub.docker.com/_/postgres 安装 # 后台运行&#xff0c;镜像名称为 postgres # --name postgres 容器名称为 postgres # POSTGRES_PASSWORD 超级用户的密码&#xff0c;超级用户名默认为&#xff1a;postgres&#xff0c;可以使用 POSTGRES_USER 环境变量设…

Jmeter使用js对入参使用MD5加密

新增前置处理器JSR223 PreProcessor 注意: 加密的js文件需要放到jmtere的bin目录下,不需要使用给包围,如下图即可(这里不是真实的加密方法,需要自己引入加密算法) 脚本中不要使用let需要使用var 可以先尝试最简单的脚本在使用复杂的脚本 load方法用来加载js文件,不同的jmet…

filebeat收集日志直接输出到elasticsearch

filebeat收集日志直接输出到elasticsearch 配置/etc/filebeat/filebeat.yml # configuration file. # Filebeat inputs filebeat.inputs: - type: logenabled: truepaths:- /mnt/logfile-nas/crs-center-service-*/*.logfields:app_name: appnameprofiles_active: proapp_no…