delphi - 保存整数值以在多个过程中使用
问题描述
成功创建自定义程序后,我设法将其集成到我的案例中。问题是:我需要一个整数公开保存以进行更多程序,如果数字随机滚动,它应该添加健康点。代码没有显示任何错误,但我想要的不起作用,我也尝试将最后一部分(开始)移到前面,但这会导致错误。有什么建议么?我尝试使用 OnCreate 在启动时设置“hp”,但没有成功。
代码在这里:
var hp:integer;
{ TForm1 }
procedure TForm1.health;
begin
Label6.Caption:= inttostr(hp);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('Play = Chooses action (Rolls a Dice)'
+ sLineBreak + 'Say = Write down a message and say it in the log'
+ sLineBreak + 'HP = Shows your current health points'
+ sLineBreak + 'ATK = Shows your current attack points '
+ sLineBreak + 'DEF = Shows your current defend points '
+ sLineBreak + ' '
+ sLineBreak + ' Actual game version: 0.1'
+ sLineBreak + '_Created by xxxxxxxxx');
end;
procedure TForm1.Button2Click(Sender: TObject);
var v:string;
begin
v:=Edit1.Text;
Log.Lines.Add('Player says: ' +v);
end;
procedure TForm1.Button3Click(Sender: TObject);
var p:integer;
begin
randomize;
p:=random(5)+1;
case p of
1: ;
2: heal;
3: Log.Lines.Add('Nothing happend');
4: ;
5: ;
end;
end;
procedure TForm1.heal;
begin
hp:=+10;
Log.Lines.Add('HP+10');
end;
begin
OnCreate
hp:=100;
Log.Lines.Add('Start: 100HP, 10ATK, 0DEF');
end.
解决方案
声明hp:=+10;
没有做你认为它做的事情。它将 的值设置hp
为,它不会将 的值增加10。 为此,您需要使用以下任一方法:10
hp
hp := hp + 10;
或者
Inc(hp, 10);
此外,理想情况下,该变量hp
应该是表单的数据成员,而不是全局变量。
而且,您应该使用表单的OnCreate
事件来执行初始化。
尝试更多类似的东西:
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Label6: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
hp: integer;
procedure ShowHealth;
procedure Heal;
end;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
hp := 100;
ShowHealth;
Log.Lines.Add('Start: 100HP, 10ATK, 0DEF');
end;
procedure TForm1.ShowHealth;
begin
Label6.Caption := IntToStr(hp);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('Play = Chooses action (Rolls a Dice)' + sLineBreak +
'Say = Write down a message and say it in the log' + sLineBreak +
'HP = Shows your current health points' + sLineBreak +
'ATK = Shows your current attack points ' + sLineBreak +
'DEF = Shows your current defend points ' + sLineBreak +
sLineBreak +
' Actual game version: 0.1' + sLineBreak +
'_Created by xxxxxxxxx');
end;
procedure TForm1.Button2Click(Sender: TObject);
var
v: string;
begin
v := Edit1.Text;
Log.Lines.Add('Player says: ' + v);
end;
procedure TForm1.Button3Click(Sender: TObject);
var
p: integer;
begin
p := random(5) + 1;
case p of
1: ;
2: Heal;
3: Log.Lines.Add('Nothing happened');
4: ;
5: ;
end;
end;
procedure TForm1.Heal;
begin
hp := hp + 10; // or Inc(hp, 10);
ShowHealth;
Log.Lines.Add('HP+10');
end;
推荐阅读
- validation - 如何确保更改域的数据完整性
- apache - 元标记未显示在 fb-messenger&discord 等... -> 使用 https 时
- java - 联系人不能转换为 org.springframework.core.io.support.ResourceRegion
- javascript - 在 React with ES6 中,constructor(prop) 不会引发错误。为什么?
- r - R中迭代更改集合中的矩阵的方法
- python - 如何将 bash 脚本导出到 python?
- sql - 如何根据字段中的值截断或添加小数 - SQL server
- go - golang 中的 smtp 问题(恐慌,信号 SIGSEGV:分段违规)
- java - 如何检查链接是否是使用 Java 的下载链接?
- php - 条件参数和返回类型声明(又名类型提示)