当前位置: 首页 > 编程日记 > 正文

一步一步实现扫雷游戏(C语言实现)(三)

使用WIN32API连接窗口

此项目相关博文链接

一步一步实现扫雷游戏(C语言实现)(一)

一步一步实现扫雷游戏(C语言实现)(二)

一步一步实现扫雷游戏(C语言实现)(三)

一步一步实现扫雷游戏(C语言实现)(四)

首先,我弄个主窗口出来,没有用到MFC,直接调用API函数实现,先看看代码吧:

///
//
//主函数:扫雷
//
///

#include
<windows.h>
#include
<stdio.h>
#include
"DrawMap.h"//见下文
#include
"def.h"

int m =10, n =10;
int map[MAX_X][MAX_Y];
int Global_x[MAX_X], Global_y[MAX_Y];


LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
WINGDIAPI BOOL WINAPI MoveToEx(HDC hdc,
int x, int y, LPPOINT lppt);//移动当前画笔的位置
WINGDIAPI BOOL WINAPI LineTo(HDC hdc, int x, int y);//用来画直线的函数
WINGDIAPI HPEN WINAPI CreatePen(int iStyle, int cWidth, COLORREF color);




int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine,
int iCmdShow)
{
init();
//初始化数组(地雷分布
int x_position, y_position, x_size, y_size;
set_position_size(
&x_position, &y_position, &x_size, &y_size);

static TCHAR szAppName[] = TEXT ("MainWin") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;

wndclass.style
= CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc
= WndProc ;
wndclass.cbClsExtra
=0 ;
wndclass.cbWndExtra
=0 ;
wndclass.hInstance
= hInstance ;
wndclass.hIcon
= LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor
= LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground
= (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName
= NULL ;
wndclass.lpszClassName
= szAppName ;

if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT (
"This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return0 ;
}

hwnd
= CreateWindow (szAppName, // window class name
TEXT ("扫雷游戏——The ClearMines Game"), // window caption
WS_OVERLAPPED | \
WS_CAPTION
| \
WS_SYSMENU
| \
WS_MINIMIZEBOX,
// window style
x_position, // initial x position
y_position, // initial y position
x_size, // initial x size
y_size, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL) ; // creation parameters
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (
&msg) ;
DispatchMessage (
&msg) ;
}
return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_PAINT:
paint_map(hwnd); //自定义的画图函数
return0;

case WM_LBUTTONDOWN: //单击鼠标
int x=LOWORD(lParam);//x,y为鼠标当前的位置坐标
int y=HIWORD(lParam);
left_key(hwnd, x, y);//自定义的响应鼠标左键的函数
break;

case WM_DESTROY:
PostQuitMessage (
0) ;
return0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}

主窗口图:

现在,看看DrawMap.h文件的一些自定义函数的声明:

#include <windows.h>
#include
<stdio.h>
#include
"NumMines.h"//这个文件就是前两篇随笔中的那个后台实现算法的,等下也放上来

//全局变量
externint map[MAX_X][MAX_Y];
externint m, n;
externint Global_x[MAX_X], Global_y[MAX_Y];

//自定义函数
void paint_map(HWND hwnd);//又看到它了,那就看代码吧
BOOL DrawGrid(HDC hdc,
int x1, int y1, int x2, int y2);//这个函数是实现在上面函数的
//设置窗口位置和大小
void set_position_size(int* p_x_position, int* p_y_position, int* p_x_size, int* p_y_size);
void left_key(HWND hwnd, int x, int y);
void DrawRec(HWND hwnd, HDC hdc, int i, int j);
RECT rectRec(HWND hwnd,
int x, int y);//x,y为小矩形左上角的坐标

void paint_map(HWND hwnd);//又看到它了,那就看代码吧

//DrawMap.cpp


//
//画图
//

void paint_map(HWND hwnd)
{
HDC hdc ;
PAINTSTRUCT ps ;
RECT rect ;
int x1,y1,x2,y2;
int x_position, y_position, x_size, y_size;
set_position_size(
&x_position, &y_position, &x_size, &y_size);

int frame_width = GetSystemMetrics(SM_CXSIZEFRAME); //边框宽度
int caption_width = GetSystemMetrics(SM_CYCAPTION); //标题栏宽度
int menu_high = GetSystemMetrics(SM_CYMENU); //菜单高度
x1 = caption_width;
y1
= caption_width;
x2
= x_size - caption_width - frame_width;
y2
= y_size -2*caption_width - frame_width;

hdc
= BeginPaint (hwnd, &ps) ;
GetClientRect (hwnd,
&rect) ;
DrawGrid(hdc, x1, y1, x2, y2);
EndPaint (hwnd,
&ps) ;
}

///
//
//画格子
//
//
BOOL DrawGrid(HDC hdc, int x1, int y1, int x2, int y2)
{
int i, j;
POINT ptLeftTop;
BOOL tmp1, tmp2;
int tmp_x1;
int tmp_y1;
int tmp_x2;
int tmp_y2;

//画横线
tmp_x1 = x1;
tmp_y1
= y1;
tmp_x2
= tmp_x1+((x2-x1)/m)*m;
for (i =0; i <= m; i++)
{
if (i != m)
{
Global_y[i]
= tmp_y1;
}
ptLeftTop.x
= tmp_x1;
ptLeftTop.y
= tmp_y1;
tmp1
= MoveToEx(hdc,ptLeftTop.x,ptLeftTop.y,NULL);
ptLeftTop.x
= tmp_x2;
ptLeftTop.y
= tmp_y1;
tmp2
= LineTo(hdc,ptLeftTop.x,ptLeftTop.y);
tmp_y1
+= (y2-y1)/n;
}

//画竖线
tmp_x1 = x1;
tmp_y1
= y1;
tmp_y2
= tmp_y1+((y2-y1)/m)*m;
for (j =0; j <= n; j++)
{
if (j != n)
{
Global_x[j]
= tmp_x1;
}
ptLeftTop.x
= tmp_x1;
ptLeftTop.y
= tmp_y1;
tmp1
= MoveToEx(hdc,ptLeftTop.x,ptLeftTop.y,NULL);
ptLeftTop.x
= tmp_x1;
ptLeftTop.y
= tmp_y2;
tmp2
= LineTo(hdc,ptLeftTop.x,ptLeftTop.y);
tmp_x1
+= (x2-x1)/m;
}
if (tmp1 == FALSE || tmp2 == FALSE)
{
return FALSE;
}
return TRUE;
}
 
///
//
//响应左键事件
//这里有问题啊!!
//单击鼠标左键不能再格子里画东西啊
//求帮忙解答啊
//
void left_key(HWND hwnd, int x, int y)//x,y为鼠标当前的位置坐标
{
int tmp_x = x, tmp_y = y, i, j;
POINT lpPoint;
PAINTSTRUCT ps ;
HDC hdc ;
RECT rect ;

for (i =0; i < m-1; i++)
{
if (tmp_x > Global_x[i] && tmp_x < Global_x[i+1]) break;
}
for (j =0; j < n-1; j++)
{
if (tmp_y > Global_y[j] && tmp_y < Global_y[j+1]) break;
}

/***************************************************
left : 指定矩形框左上角的x坐标
top: 指定矩形框左上角的y坐标
right: 指定矩形框右下角的x坐标
  bottom:指定矩形框右下角的y坐标
***************************************************
*/
rect
= rectRec(hwnd, tmp_x, tmp_y);
hdc
= GetDC(hwnd);
COLORREF Minescolor
= SetTextColor(hdc,RGB(255,0,0)); //设置地雷颜色
if (map[i][j] == MINES)
{
DrawText (hdc, TEXT (
"*"), -1, &rect,
DT_SINGLELINE
| DT_CENTER | DT_VCENTER);
GetClientRect(hwnd,
&rect);
DrawText (hdc, TEXT (
"GAME OVER!"), -1, &rect,
DT_SINGLELINE
| DT_CENTER | DT_VCENTER);
ReleaseDC(hwnd,hdc);
MessageBox(hwnd, TEXT(
"再玩一次?"),TEXT("退出"), MB_RETRYCANCEL|MB_ICONQUESTION);
}
elseif (map[i][j] ==0)
{
//ReleaseDC(hwnd,hdc);
DrawRec(hwnd, hdc, i, j);
}
elseif (map[i][j] >0&& map[i][j] <9)
{
TCHAR str_tmp[
10];
sprintf(str_tmp,
"%d",map[i][j]);
DrawText (hdc, TEXT (str_tmp),
-1, &rect,
DT_SINGLELINE
| DT_CENTER | DT_VCENTER);
//ReleaseDC(hwnd,hdc);
}
}

//画0,表示该处为0个地雷
 //感觉要使用递归,可就是无法实现
void DrawRec(HWND hwnd, HDC hdc, int i, int j)
{
TCHAR str_tmp[
1];
RECT rect
= rectRec(hwnd, Global_x[i], Global_y[j]); //当前小矩形的坐标

//hdc = GetDC(hwnd);
if (map[i][j] ==0)
{
sprintf(str_tmp,
"%d",map[i][j]);
DrawText (hdc, TEXT (str_tmp),
-1, &rect,
DT_SINGLELINE
| DT_CENTER | DT_VCENTER) ;
}
elseif (map[i][j] >0&& map[i][j] <9)
{
sprintf(str_tmp,
"%d",map[i][j]);
DrawText (hdc, TEXT (str_tmp),
-1, &rect,
DT_SINGLELINE
| DT_CENTER | DT_VCENTER) ;
//ReleaseDC(hwnd,hdc);
return;
}
}

////
//
//获取小矩形坐标
//
////
RECT rectRec(HWND hwnd, int l_x, int l_y)//x,y为小矩形左上角的坐标
{
RECT rect;
int x1,y1,x2,y2;//窗口坐标
int x_position, y_position, x_size, y_size;
set_position_size(
&x_position, &y_position, &x_size, &y_size);

int frame_width = GetSystemMetrics(SM_CXSIZEFRAME); //边框宽度
int caption_width = GetSystemMetrics(SM_CYCAPTION); //标题栏宽度
int menu_high = GetSystemMetrics(SM_CYMENU); //菜单高度
x1 = caption_width;
y1
= caption_width;
x2
= x_size - caption_width - frame_width;
y2
= y_size -2*caption_width - frame_width;

rect.left
= l_x;
rect.top
= l_y;
rect.right
= l_x+((x2-x1)/m)*m;
rect.bottom
= l_y+((y2-y2)/m)*m;
return rect;
}

其他的代码也不上来:

//NumMines.h
#include <windows.h>

#include
<stdio.h>
#include
<string.h>
#include
"time.h"
#include
"stdlib.h"

#define MAX_X 100 //行坐标最大值
#define MAX_Y 100 //纵坐标最大值
#define MINES -1 //地雷

externint m, n;
externint map[MAX_X][MAX_Y];


void set_mines(int num_mines);
int round_num_mines(int i,int j);
BOOL init(
void);

//NumMines.cpp

View Code
//NumMines.cpp

#include
"NumMines.h"

#include
<windows.h>

#include
<stdio.h>
#include
<string.h>
#include
"time.h"
#include
"stdlib.h"

/*******************************************************************
初始化地雷分布位置和个数
函数功能:根据设置的地雷个数和分布地图(map,数组)给出分布好了地雷的数组
函数原型:void set_mines( int num_mines)
参数:(in)—— int num_mines
********************************************************************
*/
void set_mines(int num_mines)
{
int num =0;
int i,j;

while (num <= num_mines)
{
srand(time(
0));
//rand()%n 取(0,n-1)的随机数
i = rand() % m;
j
= rand() % n;
//如果出现相同的情况呢?,没事,再循环几次,直到有了足够的地雷为止
if (i<0|| i>m || j<0|| j>n || map[i][j] == MINES)
{
continue;
}
map[i][j]
= MINES;
num
++;//判断地雷个数
}
}

/****************************************************************************
返回周围地雷个数的函数
函数原型: int round_num_mines(int i,int j);
参 数: int i, int j为当前的坐标
返回值类型: int 返回该坐标处周围的地雷数
返回值情况:(1)返回1-8代表周围有1-8个地雷;
(2)返回0代表周围没有地雷;
(3)返回*代表此坐标时地雷;
*****************************************************************************
*/
int round_num_mines(int i,int j)
{
if (map[i][j] == MINES)
{
return MINES;
}

int dir[8][2] = {{-1,-1},{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1}};
int k =0, num_mines =0;

for (k =0; k <8; k++)
{
if (map[i+dir[k][0]][j+dir[k][1]] =='*')
{
num_mines
++;
}
}
return num_mines;
}

BOOL init(
void)
{
memset(map,
0, sizeof(map));
int i, j;
int flag =0;

set_mines((m
*n)/10);//55个地雷

for (i=0; i<m; i++)
{
for (j=0; j<=n; j++)
{
map[i][j]
= round_num_mines(i, j);
flag
=1;
}
}
if (1== flag)
{
return TRUE;
}
return FALSE;
}
//DEF.H


#ifndef _DEF_
#define _DEF_

#define MAX_X 100 //行坐标最大值
#define MAX_Y 100 //纵坐标最大值
#define MINES -1 //地雷
#define DEF_M //默认行坐标
#define DEF_N //默认列坐标

#endif /* _DEF_ */

希望朋友们知道的帮忙解答解答,谢谢

相关文章:

关于模态对话框和非模态对话框的创建、显示,以及和父对话框的传值

当然网上关于这方面的技术博文非常多&#xff0c;此处我只是进行一下小记&#xff0c;再加一点自己的体会&#xff0c;方便以后查询。 一、模态对话框 1.创建及显示 模态对话框是一种阻塞式的对话框&#xff0c;即没有处理完该对话框&#xff0c;不能对其他地方进行操作。比…

《评人工智能如何走向新阶段》后记(再续25)

415&#xff0c;开发近红外光激发的纳米探针&#xff0c;监测大脑深层活动&#xff0c;理解神经系统功能机制。 开发、设计电压敏感纳米探针一直是个技术难关。 群体神经元活动的在体监测是揭示神经系统功能机制的关键。 近日《美国化学会志》期刊报导一项新的研究成果&…

sftp 限制用户登陆指定目录(家目录)

sftp 限制用户登陆指定目录(家目录)本文源地址http://blog.chinaunix.net/uid-42741-id-3069880.html即限制 sftp 用户登陆后&#xff0c;只能在家目录下活动&#xff0c;不能到其他或上级目录该功能需要4.8以上版本[rootbackup ~]# ssh -VOpenSSH_5.3p1, OpenSSL 1.0.1e-fips …

C#多线程学习

任何程序在执行时&#xff0c;至少有一个主线程。在.net framework class library中&#xff0c;所有与多线程机制应用相关的类都是放在System.Threading命名空间中的。如果你想在你的应用程序中使用多线程&#xff0c;就必须包含这个类。 Thread类有几个至关重要的方法&#x…

开启一个新的终端并执行特定的命令

我的项目中有利用到远程控制&#xff0c;从windows端远程控制linux端&#xff0c;那么也就是接收远程的命令并在本机执行并返回结果。在父进程中用到popen()函数&#xff0c;popen()函数通过创建一个管道&#xff0c;调用fork()产生一个子进程&#xff0c;执行一个shell以运行命…

《评人工智能如何走向新阶段》后记(再续26)

427&#xff0c;SNN机理性测试 SNN利用时空处理&#xff0c;脉冲稀疏性和较高的内部神经元带宽来最大化神经形态计算的能量效率。尽管可以在这种情况下使用常规的基于硅的技术&#xff0c;但最终的神经元突触电路需要多个晶体管和复杂的布局&#xff0c;从而限制了集成密度。论…

Android5.1.1源码 - zygote fork出的子进程如何权限降级

前言 如果不知道zygote是什么&#xff0c;或者好奇zygote如何启动&#xff0c;可以去看老罗的文章&#xff1a; Android系统进程Zygote启动过程的源代码分析所有Android应用进程都是zygote fork出来的&#xff0c;新fork出来的应用进程还保持着root权限&#xff0c;这显然是不被…

system函数

转载自此处 相关函数 fork&#xff0c;execve&#xff0c;waitpid&#xff0c;popen 头文件#includ”stdlib.h” 定义函数 int system(const char * string); 函数说明 system()会调用fork()产生子进程&#xff0c;由子进程来调用/bin/sh-c string来执行参数string字符串…

《评人工智能如何走向新阶段》后记(再续27)

439&#xff0c;彩虹一号无人机实现人类永不落地的追求 日媒&#xff1a;中国亮出杀手锏 世界各国一直在研究提高飞机的续航能力 国内研制的彩虹一号无人机采用人工智能和其他高新技术&#xff0c;飞行高度30000米&#xff0c;并终于研制成功实现人类永不落地的追求。 440&a…

使用unix工具监控cpu、内存等系统资源占用率

1&#xff09;使用 sar -u 命令监控cpu使用$ sar -u 5 512:21:15 %usr %sys %wio %idle12:21:20 54 15 13 1912:21:25 41 18 15 2712:21:30 62 20 10 912:21:35 33 11 20 3612:21:40 38 13 17 31Average 45 15 15 24%usr&#xff0d;&#xff0d;运行在用户模式下cpu的使用百分…

C# 获取图片的EXIF 信息

关于 EXIF 信息的介绍。 1 EXIF&#xff0c;是英文Exchangeable Image File(可交换图像文件)的缩写。EXIF是一种图像文件格式&#xff0c;只是文件的后缀名为jpg。EXIF信息是由数码相机在拍摄过程中采集一系列的信息&#xff0c;然后把信息放置在jpg文件的头部&#xff0c;也就…

ffmpeg录屏/摄像头/指定窗口;别名alias设置

关于ffmpeg的使用方法很多&#xff0c;我简单写一下今天我捣鼓的几个。因为我的项目中要用到录屏和录制摄像头&#xff0c;所以试了下。网上关于录制指定窗口的方法并不多&#xff0c;我也是找了好久&#xff0c;试了好久才试出来的。 好了&#xff0c;废话不多说&#xff0c;…

黄聪:BackGroundWorker解决“线程间操作无效: 从不是创建控件的线程访问它” (C# VS2008)...

在编程中经常会遇到在一个按钮中执行复杂操作&#xff0c;并将复杂操作最后返回的值加入一个ListView或ComboBox中候选。这个时候程序会卡&#xff0c;当程序员将这些卡代码放进线程(Thread)中后发现当对控件操作时出现“线程间操作无效: 从不是创建控件的线程访问它”异常。 …

AWS 中国宁夏和北京区正式上线 Amazon SageMaker,中国用户终于能用到新工具和功能!

2020年 5 月 12 日&#xff0c;亚马逊云服务 Amazon Web Services, Inc. (AWS) 宣布&#xff0c;Amazon SageMaker 在由西云数据运营的 AWS 中国 (宁夏) 区域和光环新网运营的 AWS 中国&#xff08;北京&#xff09;区域正式上线。 Amazon SageMaker 在中国的上线使中国用户获…

Ubuntu Vim YouCompleteMe 安装

0. 必要工具安装 sudo apt-get install build-essential cmake 1. 安装 vundle mkdir ~/.vim/bundle git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle 2.编辑 .vimrc set nocompatible " be iMproved, required filetype off …

ubuntu vsftpd虚拟用户配置/ubuntu12.04上搭建vsftpd服务示例linux

转自这里 在ubuntu中安装完vsftpd后&#xff0c;安装libdb4.6-util: 复制代码 代码示例: sudo apt-get install db4.6-util 在etc下面建立目录vsftpd, 创建一个txt文档&#xff0c;比如logins.txt&#xff0c;在其中输入用户名及密码,如: 复制代码 代码示例: test 12345…

云从完成超过18亿元新一轮融资,加快上市步伐

近日&#xff0c;云从科技完成新一轮融资&#xff0c;总规模超过18亿元人民币&#xff0c;投资方除了中国互联网投资基金、上海国盛、广州南沙金控、长三角产业创新基金等政府基金外&#xff0c;还包括工商银行、海尔金控等产业战略投资者&#xff0c;进一步强化“AI国家队”的…

input core input.c (1)

drivers/input/input.c 就是所谓的input的核心程序。 分析这个文件&#xff0c;先从input_init开始。 1: static int __init input_init(void) 2: { 3: err class_register(&input_class); 4: err input_proc_init(); 5: err register_chrdev(INPUT_MAJOR, "i…

Swift解读专题四——字符串与字符

2019独角兽企业重金招聘Python工程师标准>>> Swift解读专题四——字符串与字符 一、引言 Swift中提供了String类型与Characters类型来处理字符串和字符数据&#xff0c;Swift中的String类型除了提供了许多方便开发者使用的方法外&#xff0c;还可以与Foundation框架…

非模态对话框的销毁

前面写过一篇关于模态和非模态对话框的文章&#xff0c;关于模态对话框和非模态对话框的创建、显示&#xff0c;以及和父对话框的传值 。文章末尾我遗留了一个问题&#xff0c;即当销毁非模态对话框后&#xff0c;需要置创建该非模态对话框的指针为NULL,但是具体是怎么操作呢&a…

LAMP兄弟连PHP课程学习笔记 第二天 PHP中使用变量

2019独角兽企业重金招聘Python工程师标准>>> 一、变量的介绍 变量&#xff1a;是指临时储存值的容器&#xff0c;这个值可以是数字或者文本或者其他组合。可以在程序使用的过程中更改。 二、变量的声明 1、如果用到的数据需要多次被调用时就声明为变量&#xff0c;P…

清华孵化,打造智能驾驶感控平台,超星未来获千万A轮融资

2020年5月14日&#xff0c;智能驾驶初创企业北京超星未来科技有限公司今天宣布已完成数千万元A轮融资&#xff0c;由恒大高科技领投&#xff0c;中关村前沿基金、和米资本、宝钜投资及图灵创投进行跟投。本轮融资将帮助超星未来在人才端和研发端持续投入&#xff0c;通过软硬件…

71 mac boook pro 无 gpu 下caffe 安装

71 mac boook pro 无 gpu 下caffe 安装 1.首先安装homebrew工具&#xff0c;相当于Mac下的yum或apt ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 2.安装Caffe依赖 $ brew install -vd snappy leveldb gflags glog s…

比较有趣的一个笔试题目

这2天忙于找工作&#xff0c;看.NET笔试题目的时&#xff0c;发现有些笔试题目还是比较有趣的&#xff0c;虽然考的都是基础&#xff0c;但是稍有不慎还是会进入圈套。以下面一个题目为例&#xff0c;听说是晕倒了一群人 - - classProgram { staticvoidMain(string[]…

82年 AI程序员征婚启示火了!年薪百万,女生神回复

最近在某社区&#xff0c;一则程序员征婚启示火了&#xff01;很多女生在评论区表示“全中”&#xff0c;想交流看看。然后评论区就炸了&#xff0c;有人恶意说yp&#xff0c;有人说看中了楼主的钱。笔者一翻&#xff0c;发现楼主果然无意中透露了百万年薪收入&#xff0c;虽然…

MFC给按钮添加皮肤

其实这也很简单&#xff0c;但是毕竟是因为我现在已经做出来了&#xff0c;当时还是查了一些资料的。废话不多说&#xff0c;直接上代码&#xff1a; 首先在类中声明&#xff1a; HBITMAP pausehBitmap; //用于暂停按钮的皮肤 然后将资源图片添加至资源视图中&#xff0…

Python全栈开发day2

1、python种类和区别 Cpython Python的官方版本&#xff0c;使用C语言实现&#xff0c;使用最为广泛&#xff0c;CPython实现会将源文件&#xff08;py文件&#xff09;转换成字节码文件&#xff08;pyc文件&#xff09;&#xff0c;然后运行在Python虚拟机上。 Jyhton Python的…

16分钟优化mRNA疫苗稳定性! 百度AI算法LinearDesign问世

新冠病毒全球累计确诊已超过400万人&#xff0c;疫苗是终结疫情的关键胜负手。在所有正在研发的疫苗路径中&#xff0c;研发速度更快、更具潜力的mRNA疫苗作为一种新兴技术受到了国内外的重点关注。但同时&#xff0c;mRNA疫苗由于稳定性不足容易在保存、运输中降解&#xff0c…

控制台打印汉字的方法

wstring gL"自动定理证明"; wstring sL"自动定理证明器"; EditDistance editdistance(g,s); //int distanceleneditdistance.CalEditDistance(); wcout.imbue(locale("chs")); set<string>words; editdistance.GetDictionary(words); O…

模态对话框的父窗口设置

我的毕业设计基本是搞完了&#xff0c;那么最近几天在做一些测试和修改。其中就有一个问题折腾了我好久&#xff0c;今天才发现&#xff0c;原来是这么回事。 我创建了一个非模态的子对话框&#xff0c;然后在这个子对话框中又创建了一个模态对话框&#xff0c;结果意外的是点…