This repository has been archived on 2024-06-21. You can view files and clone it, but cannot push or open issues or pull requests.
CDSAE3/CDSAE3_Lian_Lian_Kan/Forms/Leisure_Mode.cs

155 lines
5.1 KiB
C#
Raw Normal View History

2024-03-22 09:03:01 +00:00
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()
{
2024-04-02 13:57:04 +00:00
Etcs.game_mode_form = this;
2024-03-22 09:03:01 +00:00
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;
2024-04-02 13:57:04 +00:00
int left_time = Etcs.left_time;
2024-03-22 09:03:01 +00:00
bool is_pause = true;
int cur_score = 0;
int factor_val = 1;
int current_base = 0;
2024-03-29 06:18:38 +00:00
int search_left_time = 0;
bool search_mode = false;
2024-04-02 13:57:04 +00:00
Dictionary<int, double> decrease_per_level = Etcs.decrease_per_level;
2024-03-29 06:18:38 +00:00
2024-03-22 09:03:01 +00:00
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'));
2024-03-29 06:18:38 +00:00
if(search_mode)
{
search_left_time--;
if (search_left_time < 0)
{
2024-04-02 13:57:04 +00:00
BeginInvoke(() => search_time.Visible = false);
2024-03-29 06:18:38 +00:00
search_mode = false;
gameControl.Search_Handler(this, new SearchEventArgs { set_search = false });
}
2024-04-02 13:57:04 +00:00
BeginInvoke(() => search_time.Text = search_left_time.ToString().PadLeft(2, '0'));
2024-03-29 06:18:38 +00:00
}
2024-03-22 09:03:01 +00:00
if (current_base <= 0)
{
2024-03-29 06:18:38 +00:00
if (factor_val > 1)
2024-03-22 09:03:01 +00:00
{
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;
2024-03-29 06:18:38 +00:00
while (current_base > 100)
2024-03-22 09:03:01 +00:00
{
2024-03-29 06:18:38 +00:00
if (factor_val >= 10)
2024-03-22 09:03:01 +00:00
{
factor_val = 10;
current_base = 100;
}
else
{
current_base -= 100;
factor_val++;
}
}
2024-03-29 06:18:38 +00:00
BeginInvoke(() => factor.Text = "x" + factor_val.ToString());
2024-03-22 09:03:01 +00:00
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)
{
Dispose();
2024-04-02 13:57:04 +00:00
Close();
2024-03-22 09:03:01 +00:00
timer.Close();
2024-04-02 13:57:04 +00:00
Etcs.form?.change_form(new Leisure_Mode_MenuForm());
2024-03-22 09:03:01 +00:00
}
2024-03-29 06:18:38 +00:00
private void exchange_Click(object sender, EventArgs e)
{
Task.Run(() => gameControl.Exchange_Handler(this, new EventArgs()));
}
private void search_Click(object sender, EventArgs e)
{
gameControl.Search_Handler(this, new SearchEventArgs { set_search = true});
search_mode = true;
2024-04-02 13:57:04 +00:00
search_left_time = Etcs.search_left_time;
search_time.Text = search_left_time.ToString().PadLeft(2, '0');
search_time.Visible = true;
2024-03-29 06:18:38 +00:00
}
2024-03-22 09:03:01 +00:00
}
}