当前位置:网站首页>PLC也能制作小遊戲----Codesys編寫猜數字小遊戲
PLC也能制作小遊戲----Codesys編寫猜數字小遊戲
2022-06-12 23:51:00 【tnt1314】
1、序言
作者作為工控人員,有點羨慕學計算機的程序員,可以通過代碼實現各種功能的軟件以及遊戲(這個是重點,嘿嘿),就像windows以前自帶的紙牌,空當接龍,掃雷等。最近發現,Codesys編程軟件擁有的各種編譯方式,以及强大的可視化功能,完全可以實現類似的小遊戲程序編寫,讓疲憊的工控人員在調機的空閑之餘可以休閑下,哈。
本文先嘗試下編寫一個容易點的小遊戲,十幾年前的文曲星上比較流行的,猜數字小遊戲。
2、猜數字規則
遊戲規則如下:
a、生成被猜數,4個數字,由0-9中隨機產生,且4個數字不重複,例如:1256、0123、8563…;
b、猜數字,由玩家輸入4比特數字,對比兩個數字,給出猜測結果提示,提示說明,玩家輸入4個數字中,存在有被猜數內的數字,且比特置相同的,提示為A,存在有被猜數內的數字,且比特置相同的,提示為B;AB的數量就是提示結果,比如被猜數為:3025,玩家猜測:1234,提示結果為:0A2B,意思是1234中有2個數字存在被猜數中,但比特置不對;若猜測0123,則提示結果為:1A2B,即0123中存在1個數字,存在被猜數中,且比特置正確,還有2個數字,存在被猜數中,但比特置不對;
c、玩家根據結果提示分析並重新猜測,直到猜測結果為4A0B,則錶示猜中了;
d、玩家可猜測是次數最多為7次,若7次還沒猜出,則遊戲失敗。
3、程序編寫
猜數字的邏輯並不複雜,因此不做流程圖了,直接根據遊戲規則編寫程序,主要包括:
a、生成4比特不重複的數字,作為被猜數;
b、比較玩家輸入的數字與被猜數,生成猜測結果;
c、數據顯示與類型轉換,需要用到的類型主要了整形和字符型。
3.1、生成隨機數
codesys並沒有生成隨機數的函數,需要下載oscat庫,其中有個GEN_RDM函數可以生成隨機數,不過其函數說明全英文的,目前還沒研究明白,只能通過其他方法。
本文參考了一個生成隨機數較為簡潔的辦法,設置一個ms級別的定時器(codesys最小可設置1ms),讓x1在0-9依次循環,通過按鈕操作,當檢測到按鈕上昇沿時,x1的值就是生成的隨機數的第一比特數據,然後讓x2在0-9中去除x1後的範圍內循環,同樣的原理生成x2,依次生成x3,x4,組合就得到4比特的隨機數。
此方法可能存在一定的偶然性,並不能完全隨機,但對於本文中猜數字遊戲來說,已經可以使用了,並沒有對隨機數嚴格的要求。生成程序用梯形圖實現,程序如下:
a、建立4個數組,比特數分別為7,8,9,10
b、建立毫秒級循環
c、 依次排除掉選中的數
d、上昇沿取數據
e、數據轉換成字符型 ,顯示使用(整數型最高比特為0是只能顯示3個數)
3.2、輸入數據比較及提示結果
3.3、結果判斷
4、可視化仿真
4.1、創建畫面,變量連接(變量連接方法略過,有疑問可參考博文ST語言實現冒泡排序的文章:https://blog.csdn.net/qq_19979629/article/details/122273823)
4.2、遊戲運行
運行視頻如下:
軟PLC也能制作小遊戲----Codesys編寫猜數字小遊戲
5、綜述
通過編程和可視化仿真,Codesys基本可以實現猜數字小遊戲的功能,接下來空閑之餘將嘗試更多休閑遊戲的編寫哈,以便開發更多的codesys功能,嘿嘿。
本文所用Codesys版本為V3.5.14.10,本文所涉及程序可在以下地址下載:
边栏推荐
- [matlab] two dimensional curve
- Buuctf-[ciscn 2019 preliminary]love math
- It is meaningful to define genus, and D can use it to explain semantics
- Explanation and practice of implicit transformation and implicit parameters in Scala
- How to make maputnik, a vector tile matching artifact, support GeoServer
- H5时代leaflet中还在用DivIcon?
- So, what is the difference between e.target and e.currenttarget?
- CS for mobile security [nethunter]
- VHDL编程实验练习题合集
- 如何实现OSM地图本地发布并自定义配图
猜你喜欢
SAP QM qp03 displays an inspection plan with multiple specs inspection features
支持Canvas的Leaflet.Path.DashFlow动态流向线
【Matlab】矩阵变换与矩阵求值
【Matlab】符号计算
Enterprise wechat H5_ Authentication, H5 application web page authorization login to obtain identity
leaflet中如何优雅的解决百度、高德地图的偏移问题
[opencv learning] small ticket recognition based on perspective transformation and OCR recognition
How does idea switch the interface to Chinese
进程间通信-共享内存shmat
Accelerating with Dali modules
随机推荐
Common message oriented middleware selection
H5時代leaflet中還在用DivIcon?
SAP QM qp03 displays an inspection plan with multiple specs inspection features
Theory + practice will help you master the dynamic programming method
华为云弹性云服务器ECS使用【华为云至简致远】
SAP Business Technology Platform (BTP) workflow function introduction
Sequence maximum return
Vscode实现PHP在浏览器实时预览
Accelerating with Dali modules
leaflet如何加载10万条数据
Divicon est toujours utilisé dans le leaflet de l'ère H5?
36 krypton's debut | "osogena" won nearly ten million angel rounds of financing. The original DLR scientists of German Aerospace Research and development system modeling and simulation CAE software PA
【HCIE论述】STP-A
【Matlab】矩阵操作
How to get Matplotlib figure size
Printf segment error (core dump): a problem caused by formatted output
Bit_ Binary number
How about opening a securities account in flush? Is it safe or not
Restrictions on MySQL function creation
H5时代leaflet中还在用DivIcon?