⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 game.pas

📁 电子小说阅读器v2.68可用于阅读pdf.html等各种形式的文档
💻 PAS
📖 第 1 页 / 共 2 页
字号:
			end;
  		end;

		if j = 1 then
     		Break;

		if (FnCountNumber = FnCurrentNumber[1]) or (FnCountNumber = FnCurrentNumber[2]) or (FnCountNumber = FnCurrentNumber[3]) then
		begin
			if FnCountNumber <> 1 then
			begin  //FnCountNumber = 1 Lose
				for i := 1 to 3 do
					if FnCurrentNumber[i] <> 0 then
						FnLineNumber := i;

				FnNumber := FnCountNumber - 1;
			end;

			Break;
		end;

		if (FnCurrentNumber[1] = 0) or (FnCurrentNumber[2] = 0) or (FnCurrentNumber[3] = 0) then
		begin
			if FnCountNumber = 2 then
			begin
				for i := 1 to 2 do
					if FnCurrentNumber[i] = 1 then
						FnLineNumber := FnLineNumber + i;

				if FnLineNumber = 3 then
					FnLineNumber := trunc(Int(random * 2)) + 1;

				FnNumber := 1;
				Break;
			end;

			if (FnCurrentNumber[1] = 1) or (FnCurrentNumber[2] = 1) or (FnCurrentNumber[3] = 1) then
			begin
				for i := 1 to 3 do
					if FnCurrentNumber[i]>1 then
						FnLineNumber := i;

				FnNumber := FnCountNumber-1;
				Break;
			end;

			if (FnCurrentNumber[1] <> FnCurrentNumber[2]) and (FnCurrentNumber[2] <> FnCurrentNumber[3]) and (FnCurrentNumber[3] <> FnCurrentNumber[1]) then
			begin
				for i := 1 to 3 do
					if FnCurrentNumber[i] > FnCountNumber / 2 then
						FnLineNumber := i;

				if FnCurrentNumber[1] = 0 then
					FnNumber := abs(FnCurrentNumber[2] - FnCurrentNumber[3]);

				if FnCurrentNumber[2]=0 then
					FnNumber := abs(FnCurrentNumber[1] - FnCurrentNumber[3]);

				if FnCurrentNumber[3]=0 then
					FnNumber := abs(FnCurrentNumber[1] - FnCurrentNumber[2]);

				Break;
			end
			else
			begin
				for i := 1 to 2 do
					if FnCurrentNumber[i] <> 0 then
						FnLineNumber := FnLineNumber + i;

				if FnLineNumber = 3 then
					FnLineNumber := trunc(Int(random * 2)) + 1;

				FnNumber := 1;
				Break;
       		end;
  		end;

		if (FnCurrentNumber[1] = FnCurrentNumber[2]) and (FnCurrentNumber[2] = FnCurrentNumber[3]) then
		begin
			FnLineNumber := trunc(Int(random * 3)) + 1;
			FnNumber := FnCurrentNumber[1];
			Break;
  		end;

		if (FnCountNumber - FnCurrentNumber[1] = 2) or (FnCountNumber - FnCurrentNumber[2] = 2) or (FnCountNumber - FnCurrentNumber[3] = 2) then
		begin
			for i := 1 to 3 do
				if FnCurrentNumber[i] <> 1 then
					FnLineNumber := i;
			FnNumber := FnCountNumber - 3;
			Break;
  		end;

		if (FnCurrentNumber[1] = FnCurrentNumber[2]) or (FnCurrentNumber[2] = FnCurrentNumber[3]) or (FnCurrentNumber[3] = FnCurrentNumber[1]) then
		begin
			if FnCurrentNumber[1] = FnCurrentNumber[2] then
				FnLineNumber := 3;

			if FnCurrentNumber[2] = FnCurrentNumber[3] then
				FnLineNumber := 1;

			if FnCurrentNumber[1] = FnCurrentNumber[3] then
				FnLineNumber := 2;

			FnNumber := FnCurrentNumber[FnLineNumber];
			Break;
  		end;

		if (FnCountNumber - FnCurrentNumber[1] = 3) or (FnCountNumber - FnCurrentNumber[2] = 3) or (FnCountNumber - FnCurrentNumber[3] = 3) or (FnCountNumber - FnCurrentNumber[1] = 4) or (FnCountNumber - FnCurrentNumber[2]= 4)
			or (FnCountNumber - FnCurrentNumber[3] = 4) or ((FnCountNumber - FnCurrentNumber[1] = 5) and (abs(FnCurrentNumber[2] - FnCurrentNumber[3]) = 1))
			or ((FnCountNumber - FnCurrentNumber[2] = 5) and (abs(FnCurrentNumber[1] - FnCurrentNumber[3]) = 1))
			or ((FnCountNumber - FnCurrentNumber[3] = 5) and (abs(FnCurrentNumber[1] - FnCurrentNumber[2]) = 1)) then
		begin
			for i := 1 to 3 do
				if FnCurrentNumber[i] > 3 then
					FnLineNumber := i;
			FnNumber := FnCountNumber-6;
			Break;
  		end;

		if (FnCountNumber - FnCurrentNumber[1] = 5) or (FnCountNumber - FnCurrentNumber[2] = 5) or (FnCountNumber - FnCurrentNumber[3] = 5) or ((FnCountNumber - FnCurrentNumber[1] = 6) and (abs(FnCurrentNumber[2] - FnCurrentNumber[3]) = 4))
			or ((FnCountNumber - FnCurrentNumber[2] = 6) and (abs(FnCurrentNumber[1] - FnCurrentNumber[3]) = 4))
			or ((FnCountNumber - FnCurrentNumber[3] = 6) and (abs(FnCurrentNumber[1] - FnCurrentNumber[2]) = 4)) then
		begin
			for i := 1 to 3 do
			if FnCurrentNumber[i] > 5 then
			  	FnLineNumber := i;
			FnNumber := FnCountNumber - 10;
			Break;
	  	end;

		if (FnCountNumber - FnCurrentNumber[1] = 9) and (abs(FnCurrentNumber[2] - FnCurrentNumber[3]) = 1) then
		begin
			FnLineNumber := 1;
			FnNumber := FnCountNumber-10;
			Break;
		end;

		for i := 1 to 3 do
			if FnCountNumber - FnCurrentNumber[i] = 12 - 2 * i then
				FnLineNumber := i;

		FnNumber := FnCountNumber - 12;
		Break;
  	end;

	if FnCountNumber <= 1 then
	begin
		if FnCountNumber = 0 then  //Lose
			case trunc(int(random * 4)) + 1 of
				1:  Application.MessageBox('你输了!',     '隐藏游戏 - 你输了', MB_ICONINFORMATION or mb_OK);
				2:  Application.MessageBox('笨蛋!',       '隐藏游戏 - 你输了', MB_ICONINFORMATION or mb_OK);
				3:  Application.MessageBox('弱智!',       '隐藏游戏 - 你输了', MB_ICONINFORMATION or mb_OK);
				4:  Application.MessageBox('白痴!',       '隐藏游戏 - 你输了', MB_ICONINFORMATION or mb_OK);
			end
		else  //Win
			case trunc(Int(random * 4)) + 1 of
				1:  Application.MessageBox('你赢了!',     '隐藏游戏 - 你赢了', MB_ICONINFORMATION or mb_OK);
				2:  Application.MessageBox('厉害!',       '隐藏游戏 - 你赢了', MB_ICONINFORMATION or mb_OK);
				3:  Application.MessageBox('了不得',       '隐藏游戏 - 你赢了', MB_ICONINFORMATION or mb_OK);
				4:  Application.MessageBox('我要砍了你!', '隐藏游戏 - 你赢了', MB_ICONINFORMATION or mb_OK);
			end;

		ItemNewGame.Enabled := True;
		FboolPCThink := False;

		Exit;
	end
	else
	begin
		Timer1.Interval := 1000;
		Timer1.Enabled := True;
	end;
end;

procedure TFormGame.ItemExitClick(Sender: TObject);
begin
	Close;
end;

procedure TFormGame.ItemAboutClick(Sender: TObject);
begin
	with TFormGameAbout.Create(nil) do
	begin
		ShowModal;
		Free;
	end;
end;

procedure TFormGame.Timer1Timer(Sender: TObject);
begin
	Timer1.Enabled := False;

	LabelPCLine.Caption := IntToStr(FnLineNumber);
	LabelPCNumber.Caption := IntToStr(FnNumber);
	DrawDogsSelected;

	Timer2.Interval := 500;
	Timer2.Enabled := True;
end;

procedure TFormGame.Timer2Timer(Sender: TObject);
begin
	Timer2.Enabled := False;
	BtnChange.Enabled := True;
	ItemChange.Enabled := True;

	FboolClickFlag := True;
	EditManLine.Text := '';
	EditManNumber.Text := '';

	EditManLine.SetFocus;
	EditManLine.SelectAll;
	FboolClickFlag := False;

	DrawDogs;
  	FboolPCThink := False;
end;

procedure TFormGame.EditManLineKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
	if (key = 40) or (key = 13) then
		EditManNumber.SetFocus;
end;

procedure TFormGame.EditManNumberKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
	if (key = 38) or (key = 40) then
		EditManLine.SetFocus;

	if key = 13 then
		BtnChange.Click;
end;

procedure TFormGame.OnEditManChange(Sender: TObject);
var strManNumer : string;
	i, j : integer;
begin
	if FboolClickFlag then Exit;

	with TEdit(Sender) do
	begin
		SetFocus;
		SelectAll;
	end;

	for i := 1 to 3 do
		for j :=  FnInitNumber[i] - FnCurrentNumber[i] + FnFirstNumber[i] to FnLastNumber[i] do
		begin
			FImageDogs[j].Picture := ImagePic.Picture;
			FnImageFlag[j] := 1;
      	end;

	FnLineNumber := 0;
	FnNumber := 0;

	strManNumer := '0' + EditManLine.Text;
	if (Length(strManNumer) = 2) and (strManNumer > '00') and (strManNumer < '04') then
		FnLineNumber := StrToInt(strManNumer);

	strManNumer := '0' + EditManNumber.Text;
	if (Length(strManNumer) = 2) and (strManNumer > '00') and (strManNumer < '08') then
	 	FnNumber := StrToInt(strManNumer);

	if ((FnLineNumber < 1) or (FnLineNumber > 3)) or (FnCurrentNumber[FnLineNumber] = 0) or ((FnNumber < 1) or (FnNumber > FnCurrentNumber[FnLineNumber])) then
		Exit;

	DrawDogsSelected;
end;

procedure TFormGame.OnImageDogsClick(Sender: TObject);
var i, nIndex : integer;
begin
	if FboolPCThink then
		Exit;

	FboolClickFlag := True;
	nindex := StrToInt((Sender as TImage).Hint);

	if FnImageFlag[nIndex] <> 0 then
	begin
		for i := 1 to 3 do
			if (nIndex >= FnFirstNumber[i]) and (nIndex <= FnLastNumber[i]) then
				FnLineNumber := i;

		FnNumber := nIndex-(FnInitNumber[FnLineNumber] - FnCurrentNumber[FnLineNumber] + FnFirstNumber[FnLineNumber]) + 1;
		EditManLine.Text := IntToStr(FnLineNumber);
		EditManNumber.Text := IntToStr(FnNumber);
		DrawDogsSelected;
	end;

  	FboolClickFlag := False;
end;

procedure TFormGame.OnImageDogsMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var nIndex : integer;
begin
	if (FboolPCThink) or (Button <> mbRight) then
		Exit;

	nIndex := StrToInt((Sender as TImage).Hint);

	if FnImageFlag[nIndex] = 2 then
		BtnChange.Click;
end;

procedure TFormGame.DrawDogs();
var i : integer;
begin
	for i := FnFirstNumber[FnLineNumber] to FnLastNumber[FnLineNumber] do
		if FnImageFlag[i] = 2 then
		begin
			FImageDogs[i].Picture := ImageNone.Picture;
			FnImageFlag[i] := 0;
		end;

	FnCurrentNumber[FnLineNumber] := FnCurrentNumber[FnLineNumber] - FnNumber;
end;

procedure TFormGame.DrawDogsSelected();
var i, j : integer;
begin
	for i := 1 to 3 do
		for j :=  FnInitNumber[i] - FnCurrentNumber[i] + FnFirstNumber[i] to FnLastNumber[i] do
		begin
			FImageDogs[j].Picture := ImagePic.Picture;
			FnImageFlag[j] := 1;
		end;

	for j := FnInitNumber[FnLineNumber] - FnCurrentNumber[FnLineNumber] + FnFirstNumber[FnLineNumber] to FnInitNumber[FnLineNumber] - FnCurrentNumber[FnLineNumber] + FnFirstNumber[FnLineNumber] + FnNumber - 1 do
	begin
		FImageDogs[j].Picture := ImageSelected.Picture;
		FnImageFlag[j] := 2;
	end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -