2009年11月11日水曜日

今日作成したサイト、ソースコードはそれぞれ

野球シミュレーション2

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.IO;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Chap6_teams : System.Web.UI.Page
{
    string DataFolderURL = "~/Chap6/Data/";
    string TeamListFile = "チームリスト.xml";
    string NewTeamFile = "新チームテンプレート.xml";
    string DataFolder;

    DataSet teamDS = new DataSet();  // メンバ表示に使用する選択チームの DataSet
    DataSet teamListDS = new DataSet();  // チーム名一覧用の DataSet(編集作業用)
    DataRow currentRow;  // 編集対象のデータ行

    // ページロード時の処理
    protected void Page_Load(object sender, EventArgs e)
    {
        DataFolder = Server.MapPath(DataFolderURL);
    }

    // 表示直前の処理
    protected void Page_PreRender(object sender, EventArgs e)
    {
        // 削除欄のチームメンバのドロップダウンリストを更新する。
        teamListDS.Clear();
        teamListDS.ReadXml(DataFolder + TeamListFile);
        TeamName_Del.DataSource = teamListDS.Tables["チーム"];
        TeamName_Del.DataBind();
    }

    // チーム選択が変更された時の処理
    protected void Team_Changed(object sender, EventArgs e)
    {
        // 選択されたチームのメンバを表示する。
        teamDS.Clear();
        teamDS.ReadXml(DataFolder + TeamName_Select.SelectedValue + ".xml");
        Member.DataSource = teamDS.Tables["選手"];
        Member.DataBind();

        // 選手が選択されていない状態にする。入力欄をクリアする。
        Member.SelectedIndex = -1;
        Order.Text = "";
        Name.Text = "";
        Hit.Text = "";

        // ViewState の内容をクリアする。
        ViewState["NameOld"] = "";
        ViewState["HitOld"] = "";
    }

     protected void Member_Selected(object sender, EventArgs e)
    { 
            if (Member.SelectedIndex == -1)
            return; 
        Order.Text = Member.SelectedRow.Cells[1].Text;
        Name.Text = Member.SelectedRow.Cells[2].Text;
        Hit.Text = Member.SelectedRow.Cells[3].Text;

        ViewState["NameOld"] = Member.SelectedRow.Cells[2].Text;
        ViewState["HitOld"] = Member.SelectedRow.Cells[3].Text;
    }

    protected void Modify_Click(object sender, EventArgs e)
    {        
            if (Member.SelectedIndex == -1)
            return;

        if (CustomValidator1.IsValid)
        { 
            currentRow["打順"] = Order.Text;
            currentRow["名前"] = Name.Text;
            currentRow["打率"] = Hit.Text;

            teamDS.WriteXml(DataFolder + TeamName_Select.SelectedValue + ".xml");
            Member.DataSource = teamDS.Tables["選手"];
            Member.DataBind();
        }
        else
        { 
            Member.DataSource = teamDS.Tables["選手"];
            Member.DataBind();
            Name.Text = Member.SelectedRow.Cells[2].Text;
            Hit.Text = Member.SelectedRow.Cells[3].Text;
        }

        ViewState["NameOld"] = Name.Text;
        ViewState["HitOld"] = Hit.Text;
    }

    protected void Button_Up_Click(object sender, ImageClickEventArgs e)
    {
        int index;
        string temp;
        DataTable teamTable;

        index = Member.SelectedIndex; 
        if (index == -1 || index == 0)
            return;
        teamDS.ReadXml(DataFolder + TeamName_Select.SelectedValue + ".xml");
        teamTable = teamDS.Tables["選手"];

        temp = (string)teamTable.Rows[index - 1]["名前"];
        teamTable.Rows[index - 1]["名前"] = (string)teamTable.Rows[index]["名前"];
        teamTable.Rows[index]["名前"] = temp;
        temp = (string)teamTable.Rows[index - 1]["打率"];
        teamTable.Rows[index - 1]["打率"] = (string)teamTable.Rows[index]["打率"];
        teamTable.Rows[index]["打率"] = temp;

        teamDS.WriteXml(DataFolder + TeamName_Select.SelectedValue + ".xml");
        Member.DataSource = teamTable;
        Member.DataBind();
        Member.SelectedIndex = index - 1;

        Order.Text = Member.SelectedRow.Cells[1].Text;
        Name.Text = Member.SelectedRow.Cells[2].Text;
        Hit.Text = Member.SelectedRow.Cells[3].Text;
        ViewState["NameOld"] = Name.Text;
        ViewState["HitOld"] = Hit.Text;
    }

    protected void Button_Down_Click(object sender, ImageClickEventArgs e)
    {
        int index;
        string temp;
        DataTable teamTable;

        index = Member.SelectedIndex; 
        if (index == -1 || index == 8)
            return;
        teamDS.ReadXml(DataFolder + TeamName_Select.SelectedValue + ".xml");
        teamTable = teamDS.Tables["選手"];

        temp = (string)teamTable.Rows[index + 1]["名前"];
        teamTable.Rows[index + 1]["名前"] = (string)teamTable.Rows[index]["名前"];
        teamTable.Rows[index]["名前"] = temp;
        temp = (string)teamTable.Rows[index + 1]["打率"];
        teamTable.Rows[index + 1]["打率"] = (string)teamTable.Rows[index]["打率"];
        teamTable.Rows[index]["打率"] = temp;

        teamDS.WriteXml(DataFolder + TeamName_Select.SelectedValue + ".xml");
        Member.DataSource = teamTable;
        Member.DataBind();
        Member.SelectedIndex = index + 1;

        xt;
        Name.Text = Member.SelectedRow.Cells[2].Text;
        Hit.Text = Member.SelectedRow.Cells[3].Text;
        ViewState["NameOld"] = Name.Text;
        ViewState["HitOld"] = Hit.Text;
    }

    protected void Button_NewTeam_Click(object sender, EventArgs e)
    {
        DataSet newTeamDS = new DataSet();
        DataRow row;

        if (File.Exists(DataFolder + TeamName_New.Text + ".xml"))
        {
            Label_TeamError.Text = "指定されたチーム名は既に存在します。";
            return;
        } 
        newTeamDS.ReadXml(DataFolder + NewTeamFile);
        row = newTeamDS.Tables["チーム"].Rows[0];
        row["チーム名"] = TeamName_New.Text;
        newTeamDS.WriteXml(DataFolder + TeamName_New.Text + ".xml");

        teamListDS.Clear();
        teamListDS.ReadXml(DataFolder + TeamListFile);
        row = teamListDS.Tables["チーム"].NewRow();
        row["チーム名"] = TeamName_New.Text;
        teamListDS.Tables["チーム"].Rows.Add(row);
        teamListDS.WriteXml(DataFolder + TeamListFile);

        TeamName_Select.DataBind();
        TeamName_Select.SelectedIndex = TeamName_Select.Items.Count - 1;
        Member.DataSource = newTeamDS.Tables["選手"];
        Member.DataBind();

        TeamName_New.Text = "";
    }

    protected void Button_DelTeam_Click(object sender, EventArgs e)
    {
        string teamName = TeamName_Del.SelectedValue;

        teamListDS.Clear();
        teamListDS.ReadXml(DataFolder + TeamListFile);
        DataRow[] rows = teamListDS.Tables["チーム"].Select("チーム名 = '" + teamName + "'");
        if (rows.Length == 0)
        {
            Label_TeamError.Text = "指定されたチーム名は既に削除されています。";
            return;
        }

        teamListDS.Tables["チーム"].Rows.Remove(rows[0]);
        teamListDS.WriteXml(DataFolder + TeamListFile);

        File.Delete(DataFolder + teamName + ".xml");

        TeamName_Select.DataBind();
    }

    protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
    {
        DataTable teamTable;

        if (Member.SelectedIndex == -1 || ViewState["NameOld"] == null || ViewState["HitOld"] == null)
        {
            args.IsValid = false;
            return;
        }

        try
        {
            teamDS.ReadXml(DataFolder + TeamName_Select.SelectedValue + ".xml");
        }
        catch
        {
            TeamName_Select.DataBind();
            args.IsValid = false;
            return;
        }

        teamTable = teamDS.Tables["選手"];
        currentRow = teamTable.Select("打順 = '" + Order.Text + "'")[0];
        if ((string)currentRow["名前"] == (string)ViewState["NameOld"]
            && (string)currentRow["打率"] == (string)ViewState["HitOld"])
            args.IsValid = true;
        else
            args.IsValid = false;
    }
}

です。野球シミュレーション自体は昨日の野球シミュレーションと同じですが、チーム編集の画面に移動してチームのめーバーの名前や打率を変更したり、さらには新しいチームを作成したりしてからシミュレーションできるようになりました。

なのでとりあえずKamimuraというチームを作成し、選手の打率をすべて5割にして最強チームを作って遊んだりしてみました。誰でもシミュレーションできるようになっているの自由にチームを作成して楽しんでもらえると嬉しいです。

明日からもまた少しずつ成長していきたいなあと思う今日この頃です。

0 コメント:

コメントを投稿