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

📄 kukuri.cpp

📁 MONA是为数不多的C++语言编写的一个很小的操作系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    // 距離が70以上の時だけ動かす  if(distance > 70){    if(w_num == 3) w_num = 0; else w_num++;    this->RefreshInternal();    this->set_Location(Point((int)(this->get_X() + px), (int)(this->get_Y() + py)));    s_interval = 0;    return;  }  this->Refresh();}/**  位置の計算    画像の中心から計算するように補正。*/void Kukuri::calculation(int tmp_x, int tmp_y){  double tx = tmp_x - (this->get_X() + KUKURI_WIDTH  / 2);  double ty = tmp_y - (this->get_Y() + KUKURI_HEIGHT / 2);  distance = sqrt(tx * tx + ty * ty);  /** 角度(ラジアン) */  double rr = 0;    if(tx == 0){  // ゼロで割れない    if(ty > 0) rr = RAD(270);    else       rr = RAD( 90);  }else{    rr = atan(ty / tx);    if(tx < 0) rr += RAD(180);    if(rr < 0) rr += RAD(360);  }  r = int(DEG(rr));    px = IDOU * cos(rr);  py = IDOU * sin(rr);}/**  一回転して横にずれる*/void Kukuri::turn(){  int t = 0;    if(t_num < 9){  // 回転 Pixmap は9枚    nowPix = kuTurn[t_num];    t_num++;    this->Refresh();    return;  }    if(a_t_num == 11){  // 移動も終了,杖もついたら    t_num = a_t_num = 0;    switch(n_state){  // ここからそれぞれ実行    //case 4:  editMenu();n_state=1;break;    //case 5:  about(0, 0);break;    //case 7:  generate();          break;    default:      n_state = 1;    }    a_t_dir = 0;    return;  }else if(a_t_num > 6){  // 移動だけ終了してたら杖をつく    switch(a_t_num){  // 原始的な処理    case 7:    case 10:      if(a_t_dir2) t = 2; else t = 6;      break;    case 8:    case 9:      if(a_t_dir2) t = 9; else t = 10;      break;    default:      this->Hide();      return;    }    nowPix = kuTurn[t];    a_t_num++;  }else{  // 横にずれる    if(a_t_dir == 0){  // 初めてだったら処理      a_t_dir= 1; a_t_dir2=1; // 左向きで右移動    }    switch(a_t_num){  // 原始的な処理    case 0:    case 4:    case 2:    case 6:      t = 0;      break;    case 1:    case 5:      t = 8;      break;    case 3:    case 7:      t = 24;      break;    default:      this->Hide();      return;    }    nowPix = kuPix[t + a_t_dir2 * 4];    this->RefreshInternal();    this->set_Location(Point(this->get_X() + (a_t_dir * 4), this->get_Y()));    a_t_num++;    return;  }  this->Refresh();}/**  ククリ様ねむねむ*/void Kukuri::sleeping(){  // 10カウントでこっくりする  if(s_count != 10){    s_count++;  // カウントする    return;  }    s_pixmap = !s_pixmap; // 0, 1 で Pixmapを入れ換え  nowPix = kuSleep[s_pixmap];  s_count = 0;    // もし自動モードなら起きるかどうか判定  if(a_state == 3 && (int)(rand.nextDouble() * 10) == 0){    n_state = 9;    a_state = 0;  }}/**  ばいばーい*/void Kukuri::byebye(){  if(t_num >= 8){    this->Hide();    return;  }    switch(t_num){  case 4:   // 原始的に Pixmapを決定  case 6:  case 8:    nowPix = kuBye[2];    break;  case 5:  case 7:    nowPix = kuBye[3];    break;  default:    nowPix = kuBye[t_num];  }  this->Refresh();  t_num++;}/**  びっくり*/void Kukuri::wow(){  int t = 0;    // turn() の中に入れると、  // turn() が終わったら次が実行されるので  // びっくりが終わってから 失敗が生成されてしまい  // 都合が悪いので別にしている    if(t_num < 13){  // びっくりのカウント中    if(a_t_dir2) t = 0; else t = 1; // Pixmap決定    nowPix = kuWow[t];    t_num++;  }else{  // カウントが終わったら    nowPix = kuPix[d];    t_num = 0;    if(a_state == 2){      // 自動モードで来た場合の処理      n_state = 9;      a_state = 0;    }else{      n_state = 1;    }  }  this->Refresh();}class KukuriMessageBox : public Form{private:	_P<Label> label1;	_P<Button> button1;	public:	KukuriMessageBox()	{		this->InitializeComponents();				_P<MonAPI::Screen> scr = GetDefaultScreen();		int w = this->label1->get_Width() + 16;		this->set_ClientSize(Size(w, 62));		this->set_Location(Point(			(scr->getWidth () - this->get_Width ()) / 2,			(scr->getHeight() - this->get_Height()) / 2));		this->button1->set_Bounds(Rectangle(			(w - 56) / 2, 32, 56, 24));	}		virtual ~KukuriMessageBox() {}	private:	void InitializeComponents()	{		this->label1 = new Label();		this->button1 = new Button();				this->set_Text("ククリ様");				this->label1->set_Bounds(Rectangle(8, 8, 134, 16));		this->label1->set_Text("5人以上は増やせないよ!");		this->get_Controls()->Add(this->label1.get());				this->button1->set_Text("OK");		this->button1->add_Click(new EventHandler<KukuriMessageBox>(this, &KukuriMessageBox::button1_Click));		this->get_Controls()->Add(this->button1.get());	}		void button1_Click(_P<Object> sender, _P<EventArgs> e)	{		//_P<Graphics> g = this->CreateGraphics();		//Size sz = g->MeasureString(this->label1->get_Text(), Control::get_DefaultFont());		//printf("{%d, %d}\n", sz.Width, sz.Height);		//g->Dispose();		this->Hide();	}};static _P<KukuriMessageBox> kukuriMessageBox;class KukuriMessageFilter : public IMessageFilter{public:	virtual bool PreFilterMessage(Message* m)	{		if (m->header != KUKURI_NEW) return false;				if (kukuris.size() < 5)		{			(new Kukuri())->Show();		}		else if (kukuriMessageBox == NULL)		{			kukuriMessageBox = new KukuriMessageBox();			kukuriMessageBox->Show();		}		return true;	}} kukuriMessageFilter;void Kukuri::Main(_A<String> args){	dword tid = CheckProcess("KUKURI.EL2");	if (tid != THREAD_UNKNOWN)	{		MonAPI::Message::send(tid, KUKURI_NEW);	}	else	{		String bundlePath = MonAPI::System::getBundlePath();		kukuri = new Bitmap(bundlePath + "/KUKURI.BM2");				int w = kukuri->get_Width(), h = kukuri->get_Height();		kukuriMirror = new Bitmap(w, h);		for (int y = 0; y < h; y++)		{			for (int x = 0; x < w; x++)			{				kukuriMirror->SetPixel(x, y, kukuri->GetPixel(w - x - 1, y));			}		}				Application::AddMessageFilter(&kukuriMessageFilter);				kukuriTimer = new Timer();		kukuriTimer->set_Interval(100);		kukuriTimer->Start();				(new Kukuri())->Show();				while (kukuris.size() > 0 || kukuriMessageBox != NULL)		{			Application::DoEvents();			for (int i = 0; i < kukuris.size(); i++)			{				_P<Kukuri> k = kukuris[i];				if (!k->get_Visible())				{					k->Dispose();					kukuris.remove(k);					i--;				}			}			if (kukuriMessageBox != NULL && !kukuriMessageBox->get_Visible())			{				kukuriMessageBox->Dispose();				kukuriMessageBox = NULL;			}		}		kukuriTimer->Dispose();		kukuri->Dispose();		kukuriMirror->Dispose();	}}SET_MAIN_CLASS(Kukuri)

⌨️ 快捷键说明

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