線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:6099
推到 Plurk!
推到 Facebook!

關於重新遊戲的問題!

缺席
powervic
一般會員


發表:5
回覆:7
積分:2
註冊:2008-03-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-03-17 17:36:35 IP:59.126.xxx.xxx 訂閱
我寫了一個貪食蛇的遊戲
利用了Shape做蛇體移動以及障礙
但是我要如何製作一個重新遊戲的按鍵能讓我的Form回到最初狀態
編輯記錄
yckuo 重新編輯於 2008-03-19 07:55:59, 註解 刪除急問標題‧
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-03-18 09:07:19 IP:210.61.xxx.xxx 未訂閱
您好

可以把Form.KeyPreview設為True
然後在Form.KeyPress或KeyDown去判斷熱鍵,處理您的重置作業
powervic
一般會員


發表:5
回覆:7
積分:2
註冊:2008-03-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-03-18 14:31:09 IP:59.126.xxx.xxx 訂閱
你好~我原本就有用到KEYDOWN的功能了
因為我要接收方向
我現在的疑問是如何讓FORM遊戲後直接按鍵讓他回覆到一開始的狀態
有人說initial但是我試了都沒反應
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-03-18 14:51:14 IP:60.248.xxx.xxx 未訂閱
我沒有您細步的遊戲程式碼,而且我沒有cb環境
只能講概念,
所謂的重置,有可能是把你的遊戲關卡資料全部清空,變數回到初始值
類似
//概念碼
if keycode=熱鍵 then
{
關卡=0
分數=0
.......您程式裡用到的控管機制
}
powervic
一般會員


發表:5
回覆:7
積分:2
註冊:2008-03-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-03-18 17:56:16 IP:59.126.xxx.xxx 訂閱

[code cpp]
//---------------------------------------------------------------------------
#include
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
//---------------------------------------------------------------------------
class snake
{
public:
int body_left,body_top;
friend void __fastcall TForm1::Timer1Timer(TObject *Sender);
snake(TForm1 *Form1,int i,snake *x[]);
void move();
void move(int key,snake *x[],int i);
private:
TShape *body;
static int body_long;
static bool Game_Over;
int boundx,boundy;
int temp_top,temp_left;
};
//---------------------------------------------------------------------------
int snake::body_long=0;
bool snake::Game_Over=true;
snake::snake(TForm1 *Form1,int i,snake *x[])
{
body=new TShape(Form1);
body->Parent=Form1;
body->Shape=stCircle;
body->Width=20;
body->Height=20;
if(body_long==0)
body->Brush->Color=(TColor)0xff0000;
else
body->Brush->Color=(TColor)0x00ffff;
if(body_long<3) body->Left=100;
body->Tag=body_long;
if(body_long!=0)
{
temp_top=x[i-1]->body->Top;
temp_left=x[i-1]->body->Left;
}
body_long ;
boundx=Form1->ClientWidth;
boundy=Form1->ClientHeight;
move();
body_left=body->Left;
body_top=body->Top;
}
//---------------------------------------------------------------------------
void snake::move()
{
for(int i=0;i<body_long;i )<br /> body->Left-=20;
}
//---------------------------------------------------------------------------
void snake::move(int key, snake *x[],int i)
{
if(body->Tag==0)
{
if(key==37 && body->Left-20<0) Game_Over=false;
if(key==39 && body->Left 20>boundx) Game_Over=false;
if(key==38 && body->Top-20<0) Game_Over=false;
if(key==40 && body->Top 20>boundy) Game_Over=false;
if(key==37) body->Left-=20;
if(key==39) body->Left =20;
if(key==38) body->Top-=20;
if(key==40) body->Top =20;
for(int i=1;i<body_long;i )<br /> if(x[0]->body->Left==x[i]->body->Left && x[0]->body->Top==x[i]->body->Top)
Game_Over=false;
}
else
{
body->Left=temp_left;
body->Top=temp_top;
temp_left=x[i-1]->body->Left;
temp_top=x[i-1]->body->Top;
}
body_left=body->Left;
body_top=body->Top;
}
//---------------------------------------------------------------------------
TForm1 *Form1;
const int no=1000;
int now_no=0;
int key_temp=39;
snake *sa[no];
bool tf,check;
void __fastcall TForm1::MyPower()
{
for(int i=0;i sa[i]->move(key_temp,sa,i);
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
randomize();
for(int i=0;i<3;i )
{
sa[i]=new snake(Form1,i,sa);
now_no ;
}
do
{
check=true;
Shape1->Left=random(Form1->ClientWidth)/20*20;
Shape1->Top=random(Form1->ClientHeight)/20*20;
for(int i=0;i<3;i )
if(Shape1->Left==sa[i]->body_left && Shape1->Top==sa[i]->body_top)
check=false;
}while(check==false);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if(sa[0]->Game_Over==true)
{
tf=true;
if(key_temp==39)
if(sa[0]->body->Left 20==Shape1->Left && sa[0]->body->Top==Shape1->Top)
sa[now_no ]=new snake(Form1,now_no,sa);
if(key_temp==37)
if(sa[0]->body->Left-20==Shape1->Left && sa[0]->body->Top==Shape1->Top)
sa[now_no ]=new snake(Form1,now_no,sa);
if(key_temp==38)
if(sa[0]->body->Top-20==Shape1->Top && sa[0]->body->Left==Shape1->Left)
sa[now_no ]=new snake(Form1,now_no,sa);
if(key_temp==40)
if(sa[0]->body->Top 20==Shape1->Top && sa[0]->body->Left==Shape1->Left)
sa[now_no ]=new snake(Form1,now_no,sa);
MyPower();
if(sa[0]->body->Left==Shape1->Left && sa[0]->body->Top==Shape1->Top)
do
{
check=true;
Shape1->Left=random(Form1->ClientWidth)/20*20;
Shape1->Top=random(Form1->ClientHeight)/20*20;
for(int i=0;i if(Shape1->Left==sa[i]->body_left && Shape1->Top==sa[i]->body_top)
check=false;
}while(check==false);
}
else
{
Timer1->Enabled=false;
ShowMessage("You Lose!");
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if(tf)
{
if(key_temp==Key || key_temp==37 && Key==39 || key_temp==38 && Key==40 || key_temp==39 && Key==37 || key_temp==40 && Key==38) return;
key_temp=Key;
tf=false;
}
}
//---------------------------------------------------------------------------

[/code]

遊戲結束時
我有把sa[i]=NULL;
然後再把FORM初始部分改到Timer裡面
用按鍵去開關我的初始
但是在程式執行都會產生錯誤
不知道是什麼環節出錯了
系統時間:2024-11-21 16:37:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!