Witam, piszę program, który ma działać bardziej na zasadzie gry. Mamy 3 pola, zmieniające się obrazki, mamy zatrzymać 3 takie same, dostajemy punkty i gramy na czas. Zrobiłem to wszystko, chciałem zrobić zapisywanie wyniku i wyświetlanie Highscores. To też mam, ładnie wszystko działa. Problem tylko z zapisaniem wyniku w odpowiedniej linii. Z c# dopiero zaczynam przygodę i zadanie to jest na lekcję jako projekt do wykonania w domu.
Tak wygląda sama część dotycząca zapisu. Jedyne moje pytanie to jak ustawić aby StreamWriter nadpisywał np. tylko 5-tą linię tekstu, a nie kasował wszystko i wstawiał jedną?
Szukałem wszędzie i nic nie mogę znaleźć ;/
Z góry dziękuje za pomoc.
@Edit.
Rozwiązałem to w ten sposób:
Jeżeli ktoś zna prostszy sposób to proszę się podzielić
W spoilerze wrzucam całość aby łatwiej było zrozumieć ocb.
Cytat:if (zapis == true)
{
nick = textBox1.Text;
StreamWriter sw = new StreamWriter("C:\\Users\\Kamil\\Desktop\\Programowanie zadania\\Jednoręki\\wyniki.txt");
sw.WriteLine(i + ";" + nick + ";" + wynik2 + Environment.NewLine);
MessageBox.Show("Zapisano twój wynik.");
sw.Close();
}
Tak wygląda sama część dotycząca zapisu. Jedyne moje pytanie to jak ustawić aby StreamWriter nadpisywał np. tylko 5-tą linię tekstu, a nie kasował wszystko i wstawiał jedną?
Szukałem wszędzie i nic nie mogę znaleźć ;/
Z góry dziękuje za pomoc.
@Edit.
Rozwiązałem to w ten sposób:
Cytat:
if (zapis == true)
{
int y = 1;
int z = i + 1;
nick = textBox1.Text;
if (nick.Length > 6)
{
int x = (nick.Length - 6);
nick = nick.Remove(nick.Length - x, x);
}
StreamWriter sw = new StreamWriter("C:\\Users\\Kamil\\Desktop\\Programowanie zadania\\Jednoręki\\wyniki.txt");
while (y < i)
{
sw.WriteLine(y + ";" + nicki[y] + ";" + wyniki[y]);
y++;
}
sw.WriteLine(i + ";" + nick + ";" + wynik2);
while ((z > i) && (z <= 10))
{
sw.WriteLine(z + ";" + nicki[i] + ";" + wyniki[i]);
i++;
z++;
}
MessageBox.Show("Zapisano twój wynik.");
sw.Close();
}
Close();
Jeżeli ktoś zna prostszy sposób to proszę się podzielić
W spoilerze wrzucam całość aby łatwiej było zrozumieć ocb.
Spoiler:
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 System.IO;
namespace Jednoręki
{
public partial class Form4 : Form
{
Form1 form1;
public Form4(Form1 form1)
{
this.form1 = form1;
InitializeComponent();
asdf();
spr_wyniku();
}
public int wynik2;
public string nick;
public int[] wyniki = new int[15];
public string[] nicki = new string[15];
public int[] miejsce = new int[15];
public int i = 0;
public bool zapis = false;
public void asdf()
{
wynik2 = form1.wynik;
label1.Text = "Ukończyłeś grę!" + Environment.NewLine + "Twój wynik to: " + wynik2.ToString();
}
public void spr_wyniku()
{
if (wynik2 > 0)
{
StreamReader sr = new StreamReader(@"C:\\Users\\Kamil\\Desktop\\Programowanie zadania\\Jednoręki\\wyniki.txt");
while (sr.EndOfStream == false)
{
string linia = sr.ReadLine();
if (linia.Length > 0)
{
i++;
string[] dane = linia.Split(';');
miejsce[i] = int.Parse(dane[0]);
nicki[i] = dane[1];
wyniki[i] = int.Parse(dane[2]);
}
else break;
}
while (i >= 1)
{
if (wynik2 < wyniki[i])
{
if (i >= 10)
{
zapis = false;
label2.Dispose();
textBox1.Dispose();
button1.Text = "Powrót do gry";
break;
}
zapis = true;
i++;
break;
}
else if (wynik2 > wyniki[i])
{
button1.Text = "Gotowe";
label2.Show();
textBox1.Show();
zapis = true;
}
else break;
i--;
}
sr.Close();
}
else
{
label2.Dispose();
textBox1.Dispose();
button1.Text = "Powrót do gry";
}
}
private void button1_Click(object sender, EventArgs e)
{
if (zapis == true)
{
int y = 1;
int z = i + 1;
nick = textBox1.Text;
if (nick.Length > 6)
{
int x = (nick.Length - 6);
nick = nick.Remove(nick.Length - x, x);
}
StreamWriter sw = new StreamWriter("C:\\Users\\Kamil\\Desktop\\Programowanie zadania\\Jednoręki\\wyniki.txt");
while (y < i)
{
sw.WriteLine(y + ";" + nicki[y] + ";" + wyniki[y]);
y++;
}
sw.WriteLine(i + ";" + nick + ";" + wynik2);
while ((z > i) && (z <= 10))
{
sw.WriteLine(z + ";" + nicki[i] + ";" + wyniki[i]);
i++;
z++;
}
MessageBox.Show("Zapisano twój wynik.");
sw.Close();
}
Close();
}
}
}
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 System.IO;
namespace Jednoręki
{
public partial class Form4 : Form
{
Form1 form1;
public Form4(Form1 form1)
{
this.form1 = form1;
InitializeComponent();
asdf();
spr_wyniku();
}
public int wynik2;
public string nick;
public int[] wyniki = new int[15];
public string[] nicki = new string[15];
public int[] miejsce = new int[15];
public int i = 0;
public bool zapis = false;
public void asdf()
{
wynik2 = form1.wynik;
label1.Text = "Ukończyłeś grę!" + Environment.NewLine + "Twój wynik to: " + wynik2.ToString();
}
public void spr_wyniku()
{
if (wynik2 > 0)
{
StreamReader sr = new StreamReader(@"C:\\Users\\Kamil\\Desktop\\Programowanie zadania\\Jednoręki\\wyniki.txt");
while (sr.EndOfStream == false)
{
string linia = sr.ReadLine();
if (linia.Length > 0)
{
i++;
string[] dane = linia.Split(';');
miejsce[i] = int.Parse(dane[0]);
nicki[i] = dane[1];
wyniki[i] = int.Parse(dane[2]);
}
else break;
}
while (i >= 1)
{
if (wynik2 < wyniki[i])
{
if (i >= 10)
{
zapis = false;
label2.Dispose();
textBox1.Dispose();
button1.Text = "Powrót do gry";
break;
}
zapis = true;
i++;
break;
}
else if (wynik2 > wyniki[i])
{
button1.Text = "Gotowe";
label2.Show();
textBox1.Show();
zapis = true;
}
else break;
i--;
}
sr.Close();
}
else
{
label2.Dispose();
textBox1.Dispose();
button1.Text = "Powrót do gry";
}
}
private void button1_Click(object sender, EventArgs e)
{
if (zapis == true)
{
int y = 1;
int z = i + 1;
nick = textBox1.Text;
if (nick.Length > 6)
{
int x = (nick.Length - 6);
nick = nick.Remove(nick.Length - x, x);
}
StreamWriter sw = new StreamWriter("C:\\Users\\Kamil\\Desktop\\Programowanie zadania\\Jednoręki\\wyniki.txt");
while (y < i)
{
sw.WriteLine(y + ";" + nicki[y] + ";" + wyniki[y]);
y++;
}
sw.WriteLine(i + ";" + nick + ";" + wynik2);
while ((z > i) && (z <= 10))
{
sw.WriteLine(z + ";" + nicki[i] + ";" + wyniki[i]);
i++;
z++;
}
MessageBox.Show("Zapisano twój wynik.");
sw.Close();
}
Close();
}
}
}