BAT 实现五子棋人机对战

2024-08-25 03:20

本文主要是介绍BAT 实现五子棋人机对战,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

🚀欢迎互三👉:程序猿方梓燚 💎💎
🚀关注博主,后期持续更新系列文章
🚀如果有错误感谢请大家批评指出,及时修改
🚀感谢大家点赞👍收藏⭐评论✍

引言

嘿,同学们!今天我们来认识一下“BAT”。在我们讨论的这个五子棋人机对战程序里,“BAT”可不是大家熟悉的某个大公司哦,而是指一种特殊的文件类型——批处理文件(Batch File)。
批处理文件呢,就像是一个魔法盒子,里面装着一系列的命令。当我们打开这个盒子(运行批处理文件)的时候,这些命令就会一个接一个地被执行。
想象一下,假如你有很多个任务要完成,比如把一些文件从一个地方复制到另一个地方、删除一些不需要的文件、打开特定的程序等等。如果一个一个地去做这些事情,那会非常麻烦和耗时。但是有了批处理文件,你就可以把这些任务的命令都写在一个文件里,然后只需要运行这个文件,电脑就会自动按照你写的命令顺序去完成这些任务。
在我们的五子棋人机对战程序中,就是用批处理文件来实现整个游戏的运行。它里面包含了各种命令,用来显示棋盘、让玩家和电脑下棋、判断谁赢了以及处理悔棋等操作。
所以呀,BAT 批处理文件虽然看起来有点神秘,但其实它就是一个能帮我们自动完成一系列任务的好帮手呢!
首先,我们来看一下效果
在这里插入图片描述在这里插入图片描述准备好了吗,开始咯!!!

一、.txt -> .bat文件

下面来教大家如何把一个普通的文本文件(.txt)转换为批处理文件(.bat)。

一、准备工作

首先,确保你有一个包含了要转换为批处理命令的文本文件。比如,你可以在记事本中写下一些命令或者指令,然后保存为.txt 文件。

二、转换步骤

找到你的文本文件

在你的电脑文件系统中找到你创建的那个.txt 文件。

重命名文件

右键点击这个文本文件,选择 “重命名”。
将文件名的扩展名从 “.txt” 改为 “.bat”。比如,如果你的文件名为 “mycommands.txt”,重命名为 “mycommands.bat”。

注意事项

在重命名的时候,你的电脑可能会弹出一个警告,提示你更改文件扩展名可能会导致文件不可用。不用太担心,如果你确定你的文件中的内容是正确的批处理命令,那么就可以继续进行重命名操作。
如果你的文件在重命名后图标没有变成批处理文件的图标,可能是你的电脑设置了隐藏文件扩展名。你可以在文件资源管理器的 “查看” 选项卡中,勾选 “文件扩展名”,以便查看和修改文件的扩展名。
这样,一个普通的文本文件就成功转换为了批处理文件啦!现在你可以双击这个批处理文件,看看它是否能按照你预期的那样执行命令。

二、程序概述

这个 BAT 五子棋程序实现了人机对战的功能,具有以下特点:
棋盘布局清晰,通过定义一系列数组来模拟棋盘状态。
电脑具有一定的智能,通过预设的规则进行下棋决策。
支持玩家悔棋、重新开始和退出等操作。

三、棋盘布局与数据结构

程序使用多个变量来定义棋盘布局数组,如li0li39,这些数组模拟了棋盘的外观和状态,相当于显示缓存。
定义了字母与数值互换对等变量,方便在程序中进行坐标转换和操作。
还定义了横向、竖向、撇向和倷向(斜角)的棋盘串原始数据,用于电脑进行对比判断和玩家下子的占位判断。

四、电脑智能(IQ)设置

程序通过设置idea变量来赋予电脑五子棋规则,每个字符串为一项,前面为棋子的排列方式,后面的数字为电脑下棋点(相对该字符串)。
通过对idea进行分析和处理,生成了一系列变量,用于电脑在游戏中的决策。

五、游戏流程

开始游戏时,玩家可以选择谁先下,包括玩家先下(W)、电脑先下(D)或退出游戏(Q)。
如果玩家选择玩家先下,程序会等待玩家输入下棋坐标。如果输入点不存在或该点已经有子,会给出相应提示。
如果玩家选择电脑先下,电脑会根据预设的规则进行下棋决策。
在游戏过程中,玩家可以悔棋、重新开始或退出游戏。

六、代码分析

一、棋盘布局与数据结构

(一)棋盘布局数组

1.首先,程序使用一系列的set语句来定义棋盘布局数组。比如set li39= A B C D E F G H I J K L M N O P Q R S定义了一个包含字母的行,这行字母实际上代表了棋盘的列标。
2.接着,像set li0= ┌─────────────────────────────────────┐set li1=A│┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐│A这样的语句定义了棋盘的边框和行列标识。这些语句共同组成了一个类似于我们在现实中看到的五子棋棋盘的外观表示,就好像是一个专门用来显示棋盘状态的画布。

(二)字母与数值互换对等变量

1.为了方便在程序中处理玩家输入的坐标和进行内部计算,程序定义了字母与数值互换对等变量。例如,set str=###################这一步创建了一个很长的字符串,后面的循环语句会利用这个字符串来定义横向、竖向、撇向和倷向(斜角)的棋盘串原始数据。
2.for /l %%a in (1,1,19) do (set he%%a=!str!&set sh%%a=!str! for /l %%b in (1,1,19) do set [%%a.%%b=0)这段代码创建了横向(he)和竖向(sh)的棋盘串,每个棋盘串初始状态都是由一连串的#组成,表示空的棋盘位置。同时,还定义了一些二维坐标变量[%%a.%%b],并初始化为0,这些变量在后续的程序中用于判断棋子的位置。
3.for %%a in (%str%) do (set/a.+=1,%%a=.&set z!.!=%%a)这段代码则建立了字母与数字的对应关系。比如,当程序执行完这段代码后,a就对应数字1z1就等于a。这样,当玩家输入一个坐标,比如 “A2” 时,程序就可以通过这些变量将字母 “A” 转换为数字 “1”,从而确定在棋盘上的具体位置。

二、电脑智能(IQ)设置

(一)定义电脑下棋规则

1.程序通过一系列的set idea语句来定义电脑的下棋规则。比如set idea=@@@@#1 #@@@@5 @#@@@4 @@@#@2 @@#@@3 $$$$#1 #$$$$5 $$#$$3 $#$$$4 $$$#$2 #@@@##2 ##@@@#5 #@@#@2 @@#@#3 #@#@@3 @#@@#4 #@@@#1,这里的每个字符串都是一项规则。
2.以 “@@@@#1” 为例,其中 “@” 代表黑棋(在程序中后面会被替换为 “●”),“#” 代表空位。这个规则的意思是,当棋盘上出现四个黑棋和一个空位时,电脑应该下在相对这个排列的第一个位置。后面的数字 “1” 就是电脑下棋的相对位置。

(二)处理电脑下棋规则

1.set ttr=!idea:@=●!&set ttr=!ttr:$=○!这一步将 “@” 替换为黑棋(“●”),将 “$” 替换为白棋(“○”),使得规则更加直观。
2.for %%a in (!ttr!) do (set var=%%a&set!var:~,-1!=!var:~-1!&set idea=!idea!!var:~,-1!)这段代码对规则进行进一步处理。它提取每个规则字符串的最后一个字符(即下棋位置)作为一个新的变量值,并将这个规则字符串和下棋位置一起添加到idea中。这样做的目的是为了在后续的程序中方便地搜索和使用这些规则。

三、游戏流程

(一)选择谁先下

1.set /p var=选择谁先下[ W,玩家 D,电脑 Q,退出 ]:这段代码会在命令行中显示一个提示,让玩家选择谁先下。玩家可以输入 “W” 表示玩家先下,“D” 表示电脑先下,“Q” 表示退出游戏。
2.根据玩家的输入,程序会设置相应的变量值。如果玩家选择玩家先下,就设置zhi=●,表示黑棋先下;如果选择电脑先下,就设置zhi=○,表示白棋先下。这个变量zhi在后续的游戏过程中用于确定当前轮到谁下棋。

(二)玩家下棋

1.set /p user=!say:say=%error%! [列前,行后]:这段代码等待玩家输入下棋坐标。玩家需要按照 “列前,行后” 的格式输入坐标,例如 “A2” 表示在第一列第二行下棋。
2.程序会根据玩家输入的坐标进行一系列的判断。首先,通过字母与数值互换对等变量将玩家输入的字母坐标转换为数字坐标。然后,检查这个位置是否已经有棋子,如果有,就显示错误提示 “该点已经有子”,并重新等待玩家输入;如果没有,就将玩家的棋子放置在这个位置,并更新相应的棋盘数据。

(三)电脑下棋

1.如果轮到电脑下棋,程序会根据预设的规则在idea中搜索所有横竖撇倷串,找到最前的匹配后确定电脑的下棋位置。
2.for %%a in (!idea!) do (...)这段代码遍历idea中的所有规则字符串。对于每个规则字符串,程序会在横向、竖向、撇向和倷向的棋盘串中进行搜索。如果找到匹配的字符串,就确定了电脑的下棋位置。
如果有多角度匹配,程序会随机取最佳的走法,把匹配的串和方位串存到变量put中。然后,根据这个变量计算出实际的下棋坐标。具体的计算方法是通过分析方位串和规则串,确定规则串在方位串中的位置,再根据字母与数字的对应关系以及相对规则串的下棋点位置,精确计算出电脑下棋的坐标。

(四)判断胜负

1.在玩家或电脑下完棋后,程序会判断是否有一方胜出。通过检查四个方向(横向、竖向、撇向和倷向)的棋盘串中是否出现连续五个相同的棋子(黑棋或白棋)来判断胜负。
2.set win=!zhi!!zhi!!zhi!!zhi!!zhi!定义了一个代表胜利的字符串,然后在四个方向的棋盘串中搜索这个字符串,如果找到,就表示有一方胜出。

(五)悔棋操作

1.如果玩家输入 “back”,程序会执行悔棋操作。悔棋操作通过将上一步下棋的位置恢复为空白状态,并更新相应的棋盘串和显示缓存来实现。
2.for %%a in (!悔:~^,6!) do (set str=%%a set/a poh=!str:~-1!,pos=!str:~,1!...)这段代码遍历悔棋记录,找到上一步下棋的位置,并将该位置在四个方向的棋盘串中恢复为空白状态。同时,更新显示缓存,以便在命令行中显示悔棋后的棋盘状态。

七、完整代码

@echo off&setlocal enabledelayedexpansion
mode con: lines=43 cols=110
set li39=    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S
set  li0=  ┌─────────────────────────────────────┐
set  li1=A│┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐│A
set var=1
for %%a in (!li39:~5^,-1!) do (set/a var+=2&set li!var!=%%a│├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤│%%a)
for /l %%a in (2,2,36) do (set li%%a=  ││  │  │  │  │  │  │  │  │  │  │  │  │  │  │  │  │  │  ││)
set li37=S│└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘│S
set li38=  └─────────────────────────────────────┘`
rem 前面定义棋盘布局数组li0~li39,相当于显示缓存set str=a b c d e f g h i j k l m n o p q r s
for %%a in (%str%) do (set/a .+=1,%%a=.&set z!.!=%%a)
rem 定义字母与数值互换对等变量如:a=1  z1=a
rem 此处定义后面有多个地方用到set li5=!li5!   五 棋 子 人 机 对 战
title   bat五子棋人机对战  作者:程序猿方梓燚set str=###################
set .=0
for /l %%a in (1,1,19) do (set he%%a=!str!&set sh%%a=!str!for /l %%b in (1,1,19) do set [%%a.%%b=0
)
rem 定义横、竖向棋盘串原始数据,用来让电脑作对比判断
rem 其中横向还用来作用户下子是否占位判断set .=33
for /l %%a in (5,1,19) do (set pi%%a=!str:~,%%a!&set ni%%a=!str:~,%%a!set pi!.!=!str:~,%%a!&set ni!.!=!str:~,%%a!set/a .-=1
)
rem 定义撇、倷(即斜角)向棋盘串原始数据,用来让电脑作对比判断set=&set a●=电脑
set=&set a○=玩家
rem 定义双方的乒乓对应转换关系rem 设置电脑IQ,即赋予电脑的五子棋规则,每个字符串为一项,前面为棋子的排列方式,后的面的数字为电脑下棋点(是相对该字符串的)
rem 有从前到后的优先顺序,@$会分别替换为黑白棋子,在这里只是为了直观才用@$代替的set idea=@@@@#1 #@@@@5 @#@@@4 @@@#@2 @@#@@3 $$$$#1 #$$$$5 $$#$$3 $#$$$4 $$$#$2 #@@@##2 ##@@@#5 #@@#@2 @@#@#3 #@#@@3 @#@@#4 #@@@#1
set idea=!idea! ##@@@4 @@@##2 #$$#$#3 #$#$$#4 ##$$$#5 #$$$##2 #$$$#1 @##@@#4 #@##@@3 ##@@#4 #@#@#@#3 #@@##2  #@#@#@4 @#@#@#3 #@#@#3 ##$$#4 #$$##2 #$#$#3 #$##$#3
set idea=!idea! @@###3 ###@@3 ##@##2 ###@#3 #@###3 @####4 ####@2 ##############7 ###########6 ########4 #####3 ####2
set idea=!idea! #$###3 $####3 ##$##2 ###$#3 ####$3 $$###3 ###$$3 $#$##2 ##$#$4 #$##$3 $##$#3 $###$3 $$$##2 #$$#$2 $$##$2 $#$$#4 $##$$3 ##$$$4
set ttr=!idea:@=!&set ttr=!ttr:$=!for %%a in (!ttr!) do (set var=%%a&set !var:~,-1!=!var:~-1!&set idea=!idea! !var:~,-1!)
rem 对定义的idea进行分析,前面部分为变量名,后面的数值为变量值,同时去掉所有数字,只剩字符串集合set ttr=
rem 设置电脑IQset say=say
:restart
for /l %%a in (0,1,39) do (echo    !li%%a!)
rem 把显示缓存显示出来setlocal enabledelayedexpansion
rem 环境压栈,以备从新开始时能恢复set li39=!li39!   reboot重新开始,exit退出。
set li37=!li37!       back 悔棋set /p var=选择谁先下[ W,玩家  D,电脑  Q,退出 ]:
if /i "!var!" equ "Q" goto :eof
if /i "!var!" equ "W" (set zhi=) else (set zhi=)
echo.rem 完全由%zhi%这个变量来制轮到哪一方下子:loop
(if %zhi% equ ● goto :men
set .=
for %%a in (!idea!) do (for %%b in (he sh) do (for /l %%c in (1,1,19) do (if "!%%b%%c:%%a=!" neq "!%%b%%c!" set/a .+=1&set put!.!=%%b %%c)        )for %%b in (pi ni) do (for /l %%c in (5,1,33) do (if "!%%b%%c:%%a=!" neq "!%%b%%c!" set/a .+=1&set put!.!=%%b %%c)        )
if defined . set put=%%a&goto :get
))rem rem 根据前面定义的idea规则,搜索所有横竖撇倷串,取到最前的匹配后跳出,
rem rem 完全没有匹配的,说明已经和棋了echo. 已经和棋了
pause
endlocal&goto :restart:men
(
set/a .=lips-1&for /f "tokens=1-3" %%b in ("li!liph! !lips! !.!") do (set %%b=!%%b:~0,%%d!!%%b:~%%c!)
set li38=!li38:`=[%悔:~,24%]!
cls
for /l %%a in (0,1,39) do (echo    !li%%a!)
rem rem 把缓存显示到屏幕set/a .=lips-1&for /f "tokens=1-3" %%b in ("li!liph! !lips! !.!") do (set %%b=!%%b:~0,%%d!%zhi%!%%b:~%%c!)
set li38=%li38%
set /p user=!say:say=%error%! [列前,行后]:
if "!user!" equ "reboot" endlocal&goto :restart
if "!user!" equ "exit" exit
if "!user!" equ "back" call :悔&goto :men
set/a pos=!user:~0,1!,poh=!user:~1,2!,var=pos-1 2>nul
if not defined [!poh!.!pos! set error=输入点不存在&goto :men
)
rem 因为前面定义了字母和数字的对应关系能及每个有效坐标为变量,所以判断速度很快if "!he%poh%:~%var%,1!" neq "#" set error=该点已经有子&goto men
goto :getok:get
set /a .=!random!%%.+1
set put=!put%.%! !put!
rem 如果有多角度匹配,则随机取最佳的走法,把匹配的串和方位串存到变量:putrem 下面是根据匹配的方位串和规则串,计算出实际坐标。
rem 首先算出规则串在方位串中的位置,再精确到单个坐标,前面定义的字母与数的对应关系及相对规则串的下棋点位置,起来了很大作用,for /f "tokens=1-3" %%a in ("%put%") do (set var=!%%a%%b:*%%c=!srqponmlkjihgfedcba0set/a var=!var:~19,1!+%%cif "%%a" equ "he" (set/a poh=%%b,pos=20-var)if "%%a" equ "sh" (set/a poh=20-var,pos=%%b)if %%b lss 19 (set/a var=%%b-var+1) else (set/a var=38-%%b-var+1)if "%%a" equ "pi" (if %%b lss 19 (set/a pos=var,poh=%%b-var+1) else (set/a poh=20-var,pos=%%b-19+var))if "%%a" equ "ni" (if %%b lss 19 (set/a pos=var,poh=19-%%b+var) else (set/a poh=var,pos=%%b-19+var))
)
set say=say !z%pos%!!z%poh%!(%poh%)&set error=电脑最后下在::getokrem 到这里是根据玩家及电脑给出的实际坐标,把下棋位置写到相应的四个方位串和显示缓存
rem 因为只改写各个方位相应的一个串而已,修改完后,马上判断是否有胜出,所以速度很快
set zhi=!%zhi%!&set win=!zhi!!zhi!!zhi!!zhi!!zhi!
(set/a piph=poh+pos-1,lips=pos*2+1,niph=19+pos-poh,liph=poh*2-1
if !piph! lss 19 (set/a pips=pos) else (set/a pips=20-poh)
if !niph! lss 19 (set/a nips=pos) else (set/a nips=poh)
for %%a in ("li!liph! !lips!" "he!poh! !pos!" "sh!pos! !poh!" "pi!piph! !pips!" "ni!niph! !nips!") do (for /f "tokens=1,2" %%b in (%%a) do (set/a .=%%c-1for %%d in (!.!) do (set %%b=!%%b:~0,%%d!%zhi%!%%b:~%%c!)if "!%%b:%win%=!" neq "!%%b!" set win=y)
))(set/a asc%zhi%+=1
set= !z%pos%!!z%poh%!!!
if !win! neq y goto :loop)for /l %%a in (0,1,39) do (echo    !li%%a!)
set/p=   !a%zhi%! %zhi%子 第!asc%zhi%!!z%pos%!!z%poh%!(%poh%)  胜出     <nul
pause
endlocal&goto :restart
:悔
if not defined 悔 goto :eof
if "!悔:~3,1!" equ "" goto :eoffor %%a in (!悔:~^,6!) do (set str=%%a
set/a poh=!str:~-1!,pos=!str:~,1!
set/a piph=poh+pos-1,niph=19+pos-poh,liph=poh*2-1,lips=pos*2+1if !piph! lss 19 (set/a pips=pos) else (set/a pips=20-poh)
if !niph! lss 19 (set/a nips=pos) else (set/a nips=poh)for %%a in ( "he!poh! !pos!" "sh!pos! !poh!" "pi!piph! !pips!" "ni!niph! !nips!") do (for /f "tokens=1,2" %%b in (%%a) do (set/a .=%%c-1for %%d in (!.!) do (set %%b=!%%b:~0,%%d!#!%%b:~%%c!))
)
for /f "tokens=1,2" %%b in ("li!liph! !lips!") do (set/a .=%%c-1for %%d in (!.!) do (set %%b=!%%b:~0,%%d!!%%b:~%%c!)
))set/a asc%zhi%-=1
set=!悔:~6!
set error=你悔棋,耍赖皮!
if not defined 悔 goto :eof
set/a poh=!悔:~2,1!,pos=!悔:~1,1!,liph=poh*2-1,lips=pos*2+1
set say=say !z%pos%!!z%poh%!(%poh%)
goto :eof

八、总结

同学们,我们一起探索了这个 BAT 五子棋人机对战程序以及文本文件转批处理文件的方法。
对于五子棋人机对战程序,它通过一系列复杂而精妙的批处理命令实现了棋盘布局、玩家和电脑下棋、判断胜负以及悔棋等功能。虽然使用的是看似简单的批处理语言,但却展现出了强大的游戏逻辑和交互性。这让我们看到即使是在有限的技术条件下,也能创造出充满趣味和挑战的游戏体验。
而关于文本文件转批处理文件,这是一个非常实用的技巧。只需要简单的重命名操作,就可以将包含特定命令的文本文件转换为可直接运行的批处理文件。但在转换过程中要注意电脑的警告提示以及文件图标显示问题,确保文件中的内容适合作为批处理命令。掌握这个转换方法后,我们可以更方便地创建和修改批处理文件,以实现各种自动化任务,为我们的日常电脑操作带来更多便利。
总之,通过对这个五子棋程序和转换方法的学习,我们不仅对批处理文件有了更深入的了解,也为我们进一步探索编程和自动化操作打开了一扇新的窗户。

这篇关于BAT 实现五子棋人机对战的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1104401

相关文章

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、

C++——stack、queue的实现及deque的介绍

目录 1.stack与queue的实现 1.1stack的实现  1.2 queue的实现 2.重温vector、list、stack、queue的介绍 2.1 STL标准库中stack和queue的底层结构  3.deque的简单介绍 3.1为什么选择deque作为stack和queue的底层默认容器  3.2 STL中对stack与queue的模拟实现 ①stack模拟实现

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机