ASP.net - Problem z polami w klasie po przeładowaniu strony.

0

Witam.

Mam pewien problem, nie znam zbytnio ASP ale robię projekt na zaliczenie. Jest to prosta gra. Wszystko działałoby pięknie gdyby było to pisane jako zwykły projekt desktopowy a nie webowy. Do rzeczy, problem polega na tym, że mam sobie 2 klasy, każda z nich ma swoje właściwości "pieniądze" i w tej zmiennej przechowywane są kwoty jakimi dysponuje bank oraz gracz. Konstruktor każdej klasy zajmuje się ustawianiem tych właściwości. Kiedy klikam na przycisk, pod którym jest wywołanie kilku klas, które obciążają klienta lub bank to faktycznie wszystko ładnie działa i widać zmodyfikowane kwoty. Ale jeżeli drugi raz klikam na przycisk to nagle właściwości otrzymują domyślne wartości, które przypisuje konstruktor, tak jakby po odświeżeniu strony od nowa był tworzony obiekt, bo pewnie zresztą jest... Teraz pytanie do was magicy, jak sobie z tym poradzić?

Pozdrawiam.

0

Naprościej

 
private void Page_Load()
{
    if (!IsPostBack)
    {
         Session["nazwa_obiektu"] = new Typ();
    }
    Typ obiekt = (Typ)Session["nazwa_obiektu"];
}
0
Bumcykowy napisał(a):

Naprościej

 
private void Page_Load()
{
    if (!IsPostBack)
    {
         Session["nazwa_obiektu"] = new Typ();
    }
    Typ obiekt = (Typ)Session["nazwa_obiektu"];
}

Ale wiesz co, nie działa mi ten kod, po prostu nie tworzy obiektu. Czy powinienem zmienić jakąś właściwość texboksów i buttona?
Tak wygląda kod Page_Load.

 
protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Session["gracz"] = new Gracz();
            Session["krupier"] = new Krupier(gracz, LabelWynik);
        }
        gracz = (Gracz)Session["gracz"];
        krupier = (Krupier) Session["krupier"];
        
        AktualizujFormularz();
    }
0

Ciężko mi coś powiedzieć u siebie sprawdziłem i działa to bez zarzutu. Wklej może całą zawartość tego pliku aspx.

0
Bumcykowy napisał(a):

Ciężko mi coś powiedzieć u siebie sprawdziłem i działa to bez zarzutu. Wklej może całą zawartość tego pliku aspx.

Cały kod klasy Graj:

 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Graj : System.Web.UI.Page
{
    int zmienna = 0;
    Gracz gracz;
    Krupier krupier;
    protected void Page_Load(object sender, EventArgs e)
    {
        gracz = new Gracz();
        krupier = new Krupier(gracz, LabelWynik);
        AktualizujFormularz();
    }
    private void AktualizujFormularz() {
        LabelBank.Text = krupier.Bank.ToString();
        LabelPieniadzeGracza.Text = gracz.Pieniadze.ToString();
        LabelZwroconyRzut.Text = zmienna.ToString();
    }
    private bool CzyPoprawnyZaklad() {
        int zaklad=int.Parse(TextBoxObstawZaklad.Text);
        if ((zaklad>gracz.Pieniadze) || zaklad<0 )
        {
            return false;
        }
        return true;
    }
    protected void ButtonZagraj_Click(object sender, EventArgs e)
    {
        if (!CzyPoprawnyZaklad())
        {
            LabelError.Text = "Masz za mało pieniędzy!";
            return;
        }
        int zaklad = int.Parse(TextBoxObstawZaklad.Text);
        int sumaOczek = int.Parse(TextBoxSumaOczekGracza.Text);
        krupier.PobierzDane(zaklad,sumaOczek);
        //krupier.ZwrocDane().ToString();
        
        zmienna++;
        AktualizujFormularz();
    }
}

cały kod klasy gracz:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Summary description for Gracz
/// </summary>
public class Gracz
{
    public int Pieniadze { get { return _pieniadze; } set { _pieniadze = value; } }
    private int _pieniadze;
	public Gracz()
	{
		//
		// TODO: Add constructor logic here
		//
        _pieniadze = 100;
	}

    public int PobierzPieniadze(int kwotaWygrana) {
        this.Pieniadze += kwotaWygrana;
        return kwotaWygrana;
    }

    internal int OddajPieniadze(int zaklad)
    {
        if (Pieniadze>0)
        {
            Pieniadze -= zaklad;
        }
        return zaklad;
    }
} 

Cały kod klasy krupier:

 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

/// <summary>
/// Summary description for Krupier
/// </summary>
public class Krupier
{
    public int Bank { get { return _bank; } private set { _bank = value; } }
    private int _bank;

    private Gracz gracz;

    private int _sumaOczekWylosowanych;

    private Random rand;
    private Label LabelWynik;
	public Krupier(Gracz gracz,Label LabelWynik)
	{
		//
		// TODO: Add constructor logic here
		//
        _bank = 1000;
        this.gracz = gracz;
        rand = new Random();
        this.LabelWynik = LabelWynik;
	}

    public void PobierzDane(int zaklad, int sumaOczek)
    {
        RzucKoscmi();
        SprawdzOczka(zaklad,sumaOczek,_sumaOczekWylosowanych);
        ZwrocDane();
    }

    private void SprawdzOczka(int zaklad, int sumaOczek, int _sumaOczekWylosowanych)
    {
        if ((sumaOczek<=6) && (_sumaOczekWylosowanych<=6))
        {
            Bank -= gracz.PobierzPieniadze(zaklad);
            LabelWynik.Text = "wygrałeś";
        }
        else
        {
            if ((sumaOczek == 7) && (_sumaOczekWylosowanych == 7))
            {
                Bank -= gracz.PobierzPieniadze(zaklad*4);
            }
            else
            {
                if ((sumaOczek > 7) && (_sumaOczekWylosowanych > 7))
                {
                    Bank -= gracz.PobierzPieniadze(zaklad);
                }
                else
                {
                    Bank+= gracz.OddajPieniadze(zaklad);
                    LabelWynik.Text = "przegrałeś";
                }
            }
        }
    }

    private void RzucKoscmi()
    {
        _sumaOczekWylosowanych = rand.Next(2, 12);
    }

    public int ZwrocDane() {
        return _sumaOczekWylosowanych;
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1