[cf67b8]: wBattle.xaml.cs  Maximize  Restore  History

Download this file

262 lines (206 with data), 9.0 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Text;
using System.Windows;
using System.Net.Sockets;
using System.Windows.Threading;
namespace YuGiOh_Ultra {
public enum GameAction { Draw = 0, Summon, Place, Set, HandDiscard, HandBanish, HandToDeck, FieldToGrave, FiledBanish, MonsterChangePos, Lose, Surrendered };
public partial class wBattle : Window {
private bool iscon = false;
private readonly DispatcherTimer Datatmr = new DispatcherTimer(), Connectioncontroltmr = new DispatcherTimer();
private readonly TcpListener Listener = new TcpListener( Com.port );
private TcpClient Client = new TcpClient();
private NetworkStream NetStr;
public string enemyip = "127.0.0.1";
public ICard MagicFieldCard;
public readonly Enemy enemy = new Enemy();
public wBattle() {
InitializeComponent();
Connectioncontroltmr.Tick += ConnectionControl;
Datatmr.Tick += TcpListenData;
Datatmr.Interval = new TimeSpan( 100 );
Datatmr.Start();
lbhand.ItemsSource = Com.me.Hand.Cards;
lbfieldmonsters.ItemsSource = Com.me.MonsterField.Cards;
lbfieldcards.ItemsSource = Com.me.StField.Cards;
}
private void TcpListenData( object sender = null, object e = null ) {
if ( !Client.Connected || Client.Available <= 0 || !NetStr.CanRead ) return;
var Bytes = new byte[Client.ReceiveBufferSize];
int len = NetStr.Read( Bytes, 0, Bytes.Length );
var msg = Encoding.ASCII.GetString( Bytes, 0, len ).Trim();
Debug.WriteLine( "wrote: " + msg );
if ( msg == "disconnected" ) {
Datatmr.Stop();
Connectioncontroltmr.Stop();
Listener.Stop();
Client.Close();
btnclientcon.IsEnabled = btnservercon.IsEnabled = true;
btnclientcon.Content = "Client Connect";
btnservercon.Content = "Server Connect";
return;
}
if ( !msg.Contains( "|" ) ) return;
var a = msg.Split( '|' );
var action = (GameAction) int.Parse(a[0]);
switch ( action ) {
}
}
private void ConnectionControl( object sender = null, object e = null ) {
try {
Listener.Start();
}
catch ( SocketException ex ) {
MessageBox.Show( "Di norma è consetito usare un solo socket alla volta" );
}
if ( !Listener.Pending() ) return;
Client = Listener.AcceptTcpClient();
NetStr = Client.GetStream();
Connectioncontroltmr.Stop();
Listener.Stop();
Datatmr.Start();
}
private void btnclientcon_Click( object sender, RoutedEventArgs e ) {
if ( !iscon ) {
iscon = true;
btnclientcon.Content = "Disconnect client";
btnservercon.IsEnabled = false;
try {
Client.Connect( enemyip, Com.port );
NetStr = Client.GetStream();
SendNetMsg( Com.me.Id + " connected" );
}
catch ( Exception ex ) {
MessageBox.Show( ex.Message );
}
}
else {
SendNetMsg( "Disconnected" );
iscon = false;
btnclientcon.Content = "Connect client";
btnservercon.IsEnabled = true;
Client.Close();
Datatmr.Stop();
NetStr.Close();
}
}
private void btnservercon_Click( object sender, RoutedEventArgs e ) {
if ( !iscon ) {
iscon = true;
btnservercon.Content = "Diconnect server";
btnclientcon.IsEnabled = false;
Listener.Start();
Connectioncontroltmr.Start();
Datatmr.Start();
}
else {
iscon = false;
btnservercon.Content = "Connect server";
btnclientcon.IsEnabled = true;
Listener.Stop();
Connectioncontroltmr.Stop();
}
}
private void btnsendnetmsg_Click( object sender, RoutedEventArgs e ) {
SendNetMsg( "test" );
}
public void SendNetMsg( string txtmsg ) {
if ( !Client.Connected || !NetStr.CanWrite ) return;
var Bytes = Encoding.ASCII.GetBytes( txtmsg );
NetStr.Write( Bytes, 0, Bytes.Length );
}
public void SendNetAction( GameAction ga ) { SendNetMsg( (int) ga + "|" ); } // +"|" because all message with an action must contain this character
public void SendNetAction( GameAction ga, ICard c ) { SendNetMsg( (int)ga + "|" + c.Code ); }
private void BtSummon_Click( object sender, RoutedEventArgs e ) {
ACard c = lbhand.SelectedItem as ACard;
if ( c == null ) return;
if ( Com.me.MonsterField.Add( c ) ) {
Com.me.Hand.Remove( c );
SendNetAction( GameAction.Summon, c );
}
}
private void btnviewdeck_Click( object sender, RoutedEventArgs e ) {
new wViewBattleCardStack( Com.me.MainDeck.Cards ).Show();
}
private void btnviewgraveyard_Click( object sender, RoutedEventArgs e ) {
new wViewBattleCardStack( Com.me.Graveyard ).Show();
}
private void BtDiscard_Click( object sender, RoutedEventArgs e ) {
var c = lbhand.SelectedItem as ACard;
if ( c == null ) return;
Com.me.Hand.Discard( c );
Com.me.Graveyard.AddTop( c );
SendNetAction( GameAction.HandDiscard, c );
}
private void btndraw_Click( object sender, RoutedEventArgs e ) {
var c = Com.me.MainDeck.Draw();
if ( c == null ) {
MessageBox.Show( "Cards finished! You lose!" );
SendNetAction( GameAction.Lose );
return;
}
Com.me.Hand.Add( c as ACard );
SendNetAction( GameAction.Draw );
}
private void Window_Closing( object sender, CancelEventArgs e ) {
SendNetMsg( "disconnected" );
Datatmr.Stop();
Connectioncontroltmr.Stop();
Listener.Stop();
Client.Close();
new wMenu().Show();
}
private void lbhand_ContextMenuOpening( object sender, System.Windows.Controls.ContextMenuEventArgs e ) {
var c = lbhand.SelectedItem as ACard;
if ( c is ASpellTrapCard ) {
BtSummon.Visibility = Visibility.Collapsed;
BtActivate.Visibility = Visibility.Visible;
} else {
BtSummon.Visibility = Visibility.Visible;
BtActivate.Visibility = Visibility.Collapsed;
}
}
private void BtHandBanish_Click( object sender, RoutedEventArgs e ) {
ACard c = lbhand.SelectedItem as ACard;
if ( c == null ) return;
Com.me.Banished.AddTop( c );
Com.me.Hand.Remove( c );
SendNetAction( GameAction.HandBanish, c );
}
private void btnviewgbanished_Click( object sender, RoutedEventArgs e ) {
new wViewBattleCardStack( Com.me.Banished ).Show();
}
private void BtPlace_Click( object sender, RoutedEventArgs e ) {
ACard c = lbhand.SelectedItem as ACard;
if ( c == null ) return;
Com.me.Hand.Remove( c );
c.Pos = CardPos.SET;
if ( c is ASpellTrapCard ) Com.me.StField.Add( c );
else Com.me.MonsterField.Add( c );
SendNetAction( GameAction.Place, c );
}
private void mftograve_Click( object sender, RoutedEventArgs e ) {
ACard c = lbfieldmonsters.SelectedItem as ACard;
if ( c == null ) return;
Com.me.MonsterField.Remove(c);
Com.me.Graveyard.AddTop(c);
SendNetAction( GameAction.FieldToGrave, c );
}
private void mfbanish_Click( object sender, RoutedEventArgs e ) {
ACard c = lbfieldmonsters.SelectedItem as ACard;
if( c == null ) return;
Com.me.MonsterField.Remove( c );
Com.me.Banished.AddTop( c );
SendNetAction( GameAction.FiledBanish, c );
}
private void mfchangepos_Click( object sender, RoutedEventArgs e ) {
NormalMonster m = lbfieldmonsters.SelectedItem as NormalMonster;
if ( m == null ) return;
m.ChangePos();
lbfieldmonsters.Items.Refresh();
SendNetAction( GameAction.MonsterChangePos, m );
}
}
}

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:





No, thanks