📄 kukuri.cpp
字号:
// 距離が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 + -