128 lines
4.1 KiB
C#
128 lines
4.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using CDSAE3_Lian_Lian_Kan.Board_funcs;
|
|
namespace CDSAE3_Lian_Lian_Kan.Forms
|
|
{
|
|
|
|
public partial class Leisure_Mode : Form, IGameMode
|
|
{
|
|
public Leisure_Mode()
|
|
{
|
|
Settings.game_mode_form = this;
|
|
InitializeComponent();
|
|
timer = new System.Timers.Timer();
|
|
timer.Enabled = false;
|
|
timer.Interval = 1000;
|
|
timer.Elapsed += Timer_Tick;
|
|
time.Text = (left_time / 60).ToString().PadLeft(2, '0') + ":" + (left_time % 60).ToString().PadLeft(2, '0');
|
|
}
|
|
System.Timers.Timer timer;
|
|
int left_time = Settings.left_time;
|
|
bool is_pause = true;
|
|
int cur_score = 0;
|
|
int factor_val = 1;
|
|
int current_base = 0;
|
|
|
|
Dictionary<int, double> decrease_per_level = Settings.decrease_per_level;
|
|
private void Timer_Tick(object? sender, EventArgs e)
|
|
{
|
|
left_time--;
|
|
BeginInvoke(() => time.Text = (left_time / 60).ToString().PadLeft(2, '0') + ":" + (left_time % 60).ToString().PadLeft(2, '0'));
|
|
if (current_base <= 0)
|
|
{
|
|
if(factor_val>1)
|
|
{
|
|
current_base = 100;
|
|
factor_val--;
|
|
BeginInvoke(() => factor.Text = "x" + factor_val.ToString());
|
|
BeginInvoke(() => energy_bar.Value = current_base);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
current_base -= (int)decrease_per_level[factor_val];
|
|
if (current_base < 0)
|
|
current_base = 0;
|
|
BeginInvoke(() => energy_bar.Value = current_base);
|
|
}
|
|
|
|
if (left_time < 0)
|
|
{
|
|
timer.Enabled = false;
|
|
Finished_Handler(this, new FinishArgs { finish_Type = FinishArgs.Finish_Type.Time_out });
|
|
}
|
|
if (is_pause) { timer.Enabled = false; }
|
|
}
|
|
public void De_pause(object sender, EventArgs e)
|
|
{
|
|
if (is_pause)
|
|
Sp_button_Click(sender, e);
|
|
}
|
|
|
|
public void Score_Add(object sender, AddScoreArgs e)
|
|
{
|
|
cur_score += e.score * factor_val;
|
|
current_base += e.score;
|
|
while(current_base>100)
|
|
{
|
|
if(factor_val>=10)
|
|
{
|
|
factor_val = 10;
|
|
current_base = 100;
|
|
}
|
|
else
|
|
{
|
|
current_base -= 100;
|
|
factor_val++;
|
|
}
|
|
}
|
|
BeginInvoke(()=>factor.Text = "x" + factor_val.ToString());
|
|
BeginInvoke(() => energy_bar.Value = current_base);
|
|
BeginInvoke(() => score.Text = cur_score.ToString());
|
|
}
|
|
public void Sp_button_Click(object sender, EventArgs e)
|
|
{
|
|
if (is_pause)
|
|
{
|
|
sp_button.Image = Properties.Resources.pause;
|
|
is_pause = false;
|
|
timer.Enabled = true;
|
|
}
|
|
else
|
|
{
|
|
sp_button.Image = Properties.Resources.play_buttton;
|
|
is_pause = true;
|
|
timer.Enabled = false;
|
|
}
|
|
}
|
|
public void Finished_Handler(object sender, FinishArgs e)
|
|
{
|
|
//TODO finish form
|
|
switch (e.finish_Type)
|
|
{
|
|
case FinishArgs.Finish_Type.All_done:
|
|
MessageBox.Show("Congratulation!");
|
|
break;
|
|
case FinishArgs.Finish_Type.Time_out:
|
|
MessageBox.Show("Time Out!");
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void back_Click(object sender, EventArgs e)
|
|
{
|
|
Close();
|
|
Dispose();
|
|
timer.Close();
|
|
Settings.form?.change_form(new Leisure_Mode_MenuForm());
|
|
}
|
|
}
|
|
}
|