c# Windows窗体应用程序设计综合实例-------小游戏设计

c# Windows窗体应用程序设计综合实例(一)匹配游戏设计

上次的计时器运行效果图如下:
效果图
= ------------------------------------------------------------------------------

今天来分享一个综合实例,设计一个匹配小游戏。
本次实例步骤较多,切勿搞混。

步骤一 新建项目

1.目的:创建项目并设计布局表。该表有助于将图标对齐到有序的 4x4 网格。需设置若干属性,以改善游戏板的外观。
2.项目名称窗体text属性改为“匹配游戏”(其他名字也行),在size属性中将窗体大小设置为550*550。
3. 添加一个TableLayoutPanel 控件,将BackColor属性设置为CornflowerBlue。(其他颜色也行,有些属性的更改可以直接粘贴文本进去设置。);将Dock属性设置为Fill(即覆盖整个窗体),将CellBorderStyle属性设置为Inset。
4. 选择 TableLayoutPanel 右上角的三角形按钮,以显示任务菜单。
在任务菜单上,选择“添加行”两次以再添加两行,然后选择“添加列”两次以再添加两列 。
三角形按钮
图一 三角形按钮
菜单
图二 菜单栏

打开菜单,选择“编辑行和列”,打开“列和行样式”窗口 。将列和行的值都设置为25%(注意设置时,都要保证右侧的设置内容为百分比,现实前面的下拉框可以切换行和列。)
属性
图三 属性设置

设置好了以后,点击确定,效果应该为是一个 4x4 网格,包含十六个大小相等的方块单元格。

5.再向左上角单元格添加一个Label 控件,将BackColor属性设置为CornflowerBlue ,将AutoSize属性设置为False。,将Dock属性设置为Fill ;TextAlign属性设置为MiddleCenter” 。图标显示在单元格中间;选中Font属性, 此时应显示一个省略号 (… ) 按钮。选择省略号按钮,并将“Font”值设置为“Webdings”,将“Font Style”设置为“Bold”,并将“Size”设置为“48” ;text属性设置为“c”

6.选择 Label 控件并将其复制到 TableLayoutPanel 中的下一单元格,保证每个单元格都被复制粘贴完成。注意每个单元格要先选中再粘贴(用快捷键ctrl+c、ctrl+v即可)

效果图:
设置效果

步骤二 添加代码

1.添加图标列表

在本步骤中,要为游戏创建一组匹配的符号。 每个符号将添加到窗体上 TableLayoutPanel 中的两个随机单元格。
查看代码的方法:在“解决方案资源管理器” 中,选择“Form1.cs” ,然后在菜单栏上选择“查看” ,选择 “代码” 。
本次需要添加的代码如下(给Form窗口添加代码):

public partial class Form1 : Form
{
   
   
       Random random = new Random();
    List<string> icons = new List<string>() 
    {
   
    
        "!", "!", "N", "N", ",", ",", "k", "k",
        "b", "b", "v", "v", "w", "w", "z", "z"
这段代码是用于初始化一个 OSDP 协议物理层数据包的函数 `osdp_phy_packet_init`,主要作用是构建数据包的头部(header),包括 SOM、地址、控制字段、安全控制块(SCB)等内容,并返回数据包的初始长度。 ### 代码解析: ```c int osdp_phy_packet_init(struct osdp_pd *pd, uint8_t *buf, int max_len) { int id, scb_len = 0; struct osdp_packet_header *pkt; // 检查缓冲区是否足够容纳最小数据包大小 if (max_len < OSDP_MINIMUM_PACKET_SIZE) { LOG_ERR("packet_init: packet size too small"); return OSDP_ERR_PKT_FMT; } /** * 如果是PD模式且接收到的数据包带有MARK字节,或者 * 是CP模式且未设置跳过MARK字节标志,则添加MARK字节。 */ if ((is_pd_mode(pd) && packet_has_mark(pd)) || (is_cp_mode(pd) && !ISSET_FLAG(pd, PD_FLAG_PKT_SKIP_MARK))) { buf[0] = OSDP_PKT_MARK; buf++; SET_FLAG(pd, PD_FLAG_PKT_HAS_MARK); // 设置标记表示包含MARK } // 填充数据包头部 pkt = (struct osdp_packet_header *)buf; pkt->som = OSDP_PKT_SOM; // 起始标志 pkt->pd_address = pd->address & 0x7F; // 地址仅使用低7位 if (ISSET_FLAG(pd, PD_FLAG_PKT_BROADCAST)) { // 如果是广播包 pkt->pd_address = 0x7F; CLEAR_FLAG(pd, PD_FLAG_PKT_BROADCAST); } // 如果是PD模式,地址最高位必须置1 if (is_pd_mode(pd)) { pkt->pd_address |= 0x80; id = pd->reply_id; // PD回复的命令ID } else { id = pd->cmd_id; // CP发送的命令ID } // 设置序列号和CRC标志 pkt->control = osdp_phy_get_seq_number(pd, is_cp_mode(pd)); pkt->control |= PKT_CONTROL_CRC; // 如果启用安全通道(SC),则添加SCB字段 if (sc_is_active(pd)) { pkt->control |= PKT_CONTROL_SCB; pkt->data[0] = scb_len = 2; pkt->data[1] = SCS_15; } else if (osdp_phy_in_sc_handshake(is_pd_mode(pd), id)) { pkt->control |= PKT_CONTROL_SCB; pkt->data[0] = scb_len = 3; pkt->data[1] = SCS_11; } // 返回数据包当前已使用的长度 return (packet_has_mark(pd) + sizeof(struct osdp_packet_header) + scb_len); } ``` --- ### 功能总- 初始化 OSDP 数据包的物理层头部。 - 支持 MARK 字节的可选添加。 - 处理广播地址和 PD 地址格式。 - 添加序列号、CRC 校验标志。 - 若启用安全通道(SC),则添加 SCB(Security Control Block)字段。 --- ###
评论 44
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思维矩阵K

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值