概括介绍
MCGS组态软件是一款适用于windows平台,快速构造和生成上位机监控的工具,mcgs组态软件下载集现场采集、数据处理和控制设备等多种功能于一身,为客户提供全方位服务。
软件特色
免费:超强功能的无限点组态软件免费用
兼容:76软件向下兼容,支持全系列产品,兼容Win7-64位系统
低耗:应用于嵌入式计算机,仅占16M系统内存
通讯:支持串口、网口等多种通讯方式,支持MPI直连、PPI1875K
驱动:提供了常用800多种设备的驱动
报表:多种数据存盘方式,多样报表显示形式,满足不同现场需求
曲线:支持实时、历史、计划等多种曲线形式,同时历史曲线的显示性能提升了10倍
动画:可实现逼真的动画效果,同时支持JPG、BMP,满足对容量和画质的不同需求
配方:配方名称支持中文,任意读写,支持配方导入导出,在线 *** 作
下载:支持高速网络在线下载,支持U盘离线更新工程
安全:可设置工程密码、 *** 作权限密码、运行期限等安全机制
简化:新增公共窗口,去除双击功能,简化组态流程
开放:用户可以自己编写驱动程序、应用程序,支持个性化定制,内置打印机功能
稳定:优化启动属性,内置看门狗,易用,可在各种恶劣环境下长期稳定运行
功能:提供中断处理,定时扫描可达毫秒级,提供对mcgsTpc串口、内存、端口的访问
存储:高压缩比的数据压缩方式,保证数据完整性,铁电存储初值,100亿次以上擦写
MCGS组态软件组成
主控窗口:是工程的主窗口或主框架。在主控窗口中可以放置一个设备窗口和多个用户窗口,负责调度和管理这些窗口的打开或关闭。主要的组态 *** 作包括:定义工程的名称,编制工程菜单,设计封面图形,确定自动启动的窗口,设定动画刷新周期,指定数据库存盘文件名称及存盘时间等。
设备窗口:是连接和驱动外部设备的工作环境。在本窗口内配置数据采集与控制输出设备,注册设备驱动程序,定义连接与驱动设备用的数据变量。
用户窗口:本窗口主要用于设置工程中人机交互的界面,诸如:生成各种动画显示画面、报警输出、数据与曲线图表等。
实时数据库:是工程各个部分的数据交换与处理中心,它将MCGS工程的各个部分连接成有机的整体。在本窗口内定义不同类型和名称的变量,作为数据采集、处理、输出控制、动画连接及设备驱动的对象。
运行策略:本窗口主要完成工程运行流程的控制。包括编写控制程序(ifthen脚本程序),选用各种功能构件,如:数据提取、定时器、配方 *** 作、多媒体输出等。
哈哈,这个我正好做了一个五子棋程序。已经实现了,不过只可以自己和自己下。但是求获胜算法没问题。
{
标题:五子棋
修改日期:2008113
作者: xlxchy
用途: 学习
备注:本五子棋实现主要算法:定义一个和棋盘同大小的二维数组,初始值都为12,每一个元素对应
棋盘上的一个可下棋子的位置[下称“标准点”];下棋时,每在棋盘上点下一个棋子,如果是
黑子,则对应的标准点的元素变2;如果是白子则变为1。每下一颗棋子,扫描二维数组,如果
有X向、Y向、XY向连续的五个元素和为10,则黑子赢;如果和为5,则为白子赢;否则继续;
待改进点:扫描棋盘二维数组时可考虑不必全盘扫描,只需要扫描下棋点周围一定范围[99]的元素和即可。
}
unit Chess;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ImgList, Menus, StdCtrls, Buttons, ComCtrls, XPMenu;
type
TForm1 = class(TForm)
ImageList1: TImageList;
Image1: TImage;
Image2: TImage;
PopupMenu1: TPopupMenu;
Exit1: TMenuItem;
SpeedButton1: TSpeedButton;
Timer1: TTimer;
StatusBar1: TStatusBar;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
Bevel1: TBevel;
Edit1: TEdit;
Bevel2: TBevel;
XPMenu1: TXPMenu;
Label1: TLabel;
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure Exit1Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
ChessFlag :integer;//棋子黑白标志,0,1[为0时标志黑子,为1时标志白子]
ChessArray : array [018] of array [018] of integer;{棋盘标准点记录二维数组,初始值全为12,
当下一个黑子对应标准点数组元素变为2
当下一个白子对应标准点数组元素变为1 }
Hour,Minute,Second:integer; //计时器变量 时:分:秒
implementation
{$R dfm}
procedure TForm1Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
ChessPic:TPicture; //棋盘
i,j:integer;
Modx,Mody :integer;
Divx,Divy :integer;
Flagx,Flagy :Boolean; //点击棋盘位置判断标志;
VictorCountx,victorCounty,VictorCountxy :integer; //胜负判断计数,为10时黑子胜利,为5时白子胜利,
begin
Flagx := False;
Flagy := False; //棋盘标准点标志初始值;
Modx := x mod 27;
Mody := y mod 27; //鼠标点击位置离标准点的距离;
Divx := x div 27;
Divy := y div 27; //鼠标点击位置是棋盘上第几个标准点;
//规格化X坐标 将标准点X轴正反向7个像素点的位置规格化为标准点;
if Modx > 20 then
begin
Divx := Divx + 1;
x := 27 Divx;
Flagx := True; //X坐标已规格化
end
else if Modx < 7 then
begin
x := 27 Divx;
Flagx := True; //X坐标已规格化
end;
//规格化Y坐标 将标准点Y轴正反向7个像素点的位置规格化为标准点
if Mody > 20 then
begin
Divy := Divy + 1;
y := 27 Divy;
Flagy := True; //Y坐标已规格化
end
else if Mody < 7 then
begin
y := 27 Divy;
Flagy := True; //Y坐标已规格化
end;
if (Flagx and Flagy) and (ChessArray[Divx][Divy] = 12) then //如果X Y 坐标都已规格化
begin
ChessPic := TPictureCreate; //创建图象;
if ChessFlag = 0 then
begin
ChessPicLoadFromFile('blackico');//装载黑棋子
ChessArray[Divx][Divy] := 2; //修改二维数组的对应元素值
ChessFlag := 1; //棋子标志转换;
end
else
begin
ChessPicLoadFromFile('whiteico'); //装载白棋子
ChessArray[Divx][Divy] := 1; //修改二维数组的对应元素值
ChessFlag:=0; //棋子标志转换;
end;
image1canvasDraw(x-14,y-14,ChessPicGraphic);//输出棋子;
for i := 0 to 18 do
for j := 0 to 18 do
begin
Image1CanvasFontSize := 28;
Image1CanvasFontColor := clred;
//行上的连续五个棋子和;
VictorCountx := ChessArray[i][j]+ChessArray[i+1][j]+ChessArray[i+2][j]+ChessArray[i+3][j]+ChessArray[i+4][j];
//列上的连续五个棋子和
VictorCounty := ChessArray[i][j]+ChessArray[i][j+1]+ChessArray[i][j+2]+ChessArray[i][j+3]+ChessArray[i][j+4];
//行上连续五个同色棋子判断;
case VictorCountx of
10 :begin
Image1CanvasTextOut(200,230,'黑子赢!');
Image1Enabled := False;
Timer1Enabled := False;//计时停止
break;
end;
5 : begin
Image1CanvasTextOut(200,230,'白子赢!');
Image1Enabled := False;
Timer1Enabled := False;//计时停止
break;
end;
end; //end [case]
//列上连续五个同色棋子判断;
case VictorCounty of
10 :begin
Image1CanvasTextOut(200,230,'黑子赢!');
Image1Enabled := False;
Timer1Enabled := False;//计时停止
break;
end;
5 : begin
Image1CanvasTextOut(200,230,'白子赢!');
Image1Enabled := False;
Timer1Enabled := False; //计时停止
break;
end;
end; //end [case]
//斜线上连续五个同色棋子判断;
VictorCountxy := ChessArray[i][j]+ChessArray[i+1][j+1]+ChessArray[i+2][j+2]+ChessArray[i+3][j+3]+ChessArray[i+4][j+4];
case VictorCountxy of
10 :begin
Image1CanvasTextOut(200,230,'黑子赢!');
Image1Enabled := False;
Timer1Enabled := False; //计时停止
break;
end;
5 : begin
Image1CanvasTextOut(200,230,'白子赢!');
Image1Enabled := False;
Timer1Enabled := False; //计时停止
break;
end;
end; //end [case]
VictorCountxy := ChessArray[i][j]+ChessArray[i+1][j-1]+ChessArray[i+2][j-2]+ChessArray[i+3][j-3]+ChessArray[i+4][j-4];
case VictorCountxy of
10 :begin
Image1CanvasTextOut(200,230,'黑子赢!');
Image1Enabled := False;
Timer1Enabled := False;//计时停止
// showmessage('The victor is Black!');
break;
end;
5 : begin
Image1CanvasTextOut(200,230,'白子赢!');
Image1Enabled := False;
Timer1Enabled := False; //计时停止
// Showmessage('The Victor is White!');
break;
end;
end; //end [case]
end;//end [for]
end;
end;
procedure TForm1FormCreate(Sender: TObject);
var
i,j :integer;
begin
ChessFlag:=0; //棋子判断标志,初始标志为0[黑子]
//二维数组赋初值;值为12;
for i := 0 to 18 do
for j := 0 to 18 do
ChessArray[i][j] := 12;
//计时器初始化
Second := -1;
Minute := 0;
Hour := 0;
end;
procedure TForm1Exit1Click(Sender: TObject);
begin
ApplicationTerminate;
end;
procedure TForm1SpeedButton1Click(Sender: TObject);//重新开始
var
i,j :integer;
begin
// 计时器初始化
Second := -1;
Minute := 0;
Hour := 0;
//启动计时器
Timer1Enabled := True;
ChessFlag := 0; //棋子初始标志,初始化为0[黑子]
Image1Enabled := True; // 棋盘恢复可用;
image1PictureLoadFromFile('boardbmp');//重新装载图象以清楚棋盘上的棋子;
for i := 0 to 18 do
for j := 0 to 18 do
ChessArray[i][j] := 12; //二维数组赋初值;
end;
procedure TForm1SpeedButton3Click(Sender: TObject);
begin
ApplicationTerminate;
end;
procedure TForm1SpeedButton2Click(Sender: TObject);
begin
Image1Visible := True;
Edit1Enabled := True;
Timer1Enabled := True;
end;
//计时器
procedure TForm1Timer1Timer(Sender: TObject);
var
TimeStr :String;
begin
TimeStr := '';
Second := Second + 1;
if Second = 60 then
begin
Second := 0;
Minute := Minute + 1;
end;
if Minute = 60 then
begin
Minute := 0;
Hour := Hour + 1;
end;
if Hour = 60 then
begin
Second := 0;
Minute := 0;
Hour := 0;
end;
if Second < 10 then
TimeStr := '0' + inttostr(Second)
else
TimeStr := inttostr(Second);
if Minute <10 then
TimeStr := '0' + inttostr(Minute) + ':' + TimeStr
else
TimeStr := inttostr(Minute) + ':' + TimeStr;
if Hour < 10 then
TimeStr := '0' + inttostr(Hour) + ':' + TimeStr
else
TimeStr := inttostr(Hour) + ':' + TimeStr;
Edit1Text := TimeStr;
end;
end
以上就是关于如何将Delphi编写的程序转换成源码,详细点全部的内容,包括:如何将Delphi编写的程序转换成源码,详细点、用delphi编写五子棋程序时判断一方获胜的代码、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)