Originally posted by 07520182
View Post
Announcement
Collapse
No announcement yet.
Lỗi không chạy hết vòng lặp! :( (cũng k biết phải nói lỗi thế nào!)
Collapse
X
-
Theo em biết thì hàm Random dựa trên bộ đếm thời gian của máy tính nên k hẳn là Random thực sự
Bro sữa chỗ này thử nè
PHP Code:ranq = new Random(unchecked((int)DateTime.Now.Ticks));
ranl = new Random(unchecked((int)DateTime.Now.Ticks));
Comment
-
Originally posted by 12520980 View PostTheo em biết thì hàm Random dựa trên bộ đếm thời gian của máy tính nên k hẳn là Random thực sự
Bro sữa chỗ này thử nè
PHP Code:ranq = new Random(unchecked((int)DateTime.Now.Ticks));
ranl = new Random(unchecked((int)DateTime.Now.Ticks));
pjo phát sinh thêm là sắp xếp các quân bài của các player theo thứ tự tăng dần!
code này để so sánh xem lá thứ nhất có lớn hơn lá thứ 2 không?
PHP Code:static byte sosanh(bai v, bai n)
{
if (v.q() > n.q()) return 1;
else if (v.l() < n.l()) return 1;
else return 0;
}
PHP Code:static void doi(bai a, bai b)
{
bai c;
c = new bai(a);
a = new bai(b);
b = new bai(c);
}
PHP Code:for (a = 0; a < 4; a++)
{
for (b = 0; b < 13; b++)
{
for (int c = 1; c < 13; c++)
{
if (sosanh(pl[a, c], pl[a, b]) == 1) doi(pl[a, c], pl[a, b]);
}
}
}
Capture.PNG
ai biết chỉ giúp em luôn cái! (_ _!)
Comment
-
Bác up code lên e xem với , em đoạn này thử bác
PHP Code:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
//tao class bai
class bai
{
int quan;//quan: A 2 3 4 .... J Q K
int loai;//loai : ♥ ♦ ♣ ♠
//khoi tao khong tham so
public bai()
{
quan = 0;
loai = 0;
}
//khoi tao co tham so
public bai(int a, int b)
{
quan = a;
loai = b;
}
//khoi tao chep
public bai(bai a)
{
quan = a.quan;
loai = a.loai;
}
public void xuat()
{
switch (quan)
{
case 1: Console.Write("A"); break;
case 11: Console.Write("J"); break;
case 12: Console.Write("Q"); break;
case 13: Console.Write("K"); break;
default: Console.Write(quan); break;
}
switch (loai)
{
case 1: Console.Write("♥"); break;
case 2: Console.Write("♦"); break;
case 3: Console.Write("♣"); break;
case 4: Console.Write("♠"); break;
}
}
public int q()
{
return quan;
}
public int l()
{
return loai;
}
}
static byte sosanh(bai v, bai n)
{
if (v.q()>n.q() || (v.q()==n.q() && v.l()<n.l())) return 1;
else return 0;
}
static void doi(ref bai a,ref bai b)
{
bai c = new bai(a);
a = b;
b = c;
}
static void Main(string[] args)
{
bai[,] bbai;
byte[,] chia;//mang nay tinh xem quan bai da duoc chia chua?
chia = new byte[4, 13];//tuong ung voi vi tri cua la bai trong bo bai
bbai = new bai[4, 13];//mang bo bai gom 52 la 4x13
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 13; j++)
{
bbai[i, j] = new bai(j + 1, i + 1);
chia[i, j] = 0;
}
}
int player;
bai[,] pl;
pl = new bai[4, 13];
Random ranq, ranl;
ranq = new Random(unchecked((int)DateTime.Now.Ticks));
ranl = new Random(unchecked((int)DateTime.Now.Ticks));
int q, l;
do
{
Console.Write("nhap so nguoi choi : ");
player = int.Parse(Console.ReadLine());
} while (player < 1 || player > 4);
//thao tac chia bai
int a, b;
for (a = 0; a < 13; a++)
{
for (b = 0; b < player; b++)
{
//lay ngau nhien la bai: ngau nhien gia tri va loai bai
do
{
q = ranq.Next(0, 13);
l = ranl.Next(0, 4);
} while (chia[l, q] == 1);//dieu kien: neu la bai chia roi thi lam lap lai thao tac
chia[l, q] = 1;//quan bai da duoc chia
pl[b, a] = bbai[l, q];//phat cho player
}
}
for (a = 0; a < player; a++)
for (b = 0; b < 13; b++)
for (int c = b+1; c < 13; c++)
if (sosanh(pl[a, b], pl[a, c]) == 1)
{
//bai d = new bai(pl[a, b]);
//pl[a, b] = pl[a, c];
//pl[a, c] = d;
doi(ref pl[a, b],ref pl[a, c]);
}
//xuat bai cua cac player
for (a = 0; a < player; a++)
{
Console.WriteLine("Nguoi choi " + (a + 1));
Console.Write(" ");
for (b = 0; b < 13; b++)
{
pl[a, b].xuat();
Console.Write(" ");
}
Console.WriteLine();
Console.WriteLine();
}
Console.ReadLine();
}
}
}
Comment
-
Originally posted by 11520104 View Postcode này là thự hiện sắp xếp cho từng player
PHP Code:for (a = 0; a < 4; a++)
{
for (b = 0; b < 13; b++)
{
for (int c = 1; c < 13; c++)
{
if (sosanh(pl[a, c], pl[a, b]) == 1) doi(pl[a, c], pl[a, b]);
}
}
}
Comment
-
Mình có một cách rất đơn giản, dễ hiểu, đó là dùng List<bai> để mô phỏng bộ bài:
- Đầu tiên, tạo một list có 52 lá theo thứ tự, mô phỏng bộ bài lúc ban đầu.
- Để mô phỏng 4 tụ bài, ta tạo ra 4 list rỗng.
- Lần lượt bốc từng lá bài ngẫu nhiên trong bộ bài (random từ 0 -> boBai.Count - 1), phát đều cho mỗi tụ (Remove() khỏi bộ bài, Add() vào tụ cần chia).
- Lặp lại việc chia bài cho đến khi bộ bài hết bài.
Để tiện việc so sánh các quân bài, bạn có thể cho class bai cài đặt IComparable interface. Khi đó nếu cần sort các tụ bài, ta có thể dùng hàm Sort() của List.
Comment
-
Originally posted by CH0901050 View PostMình có một cách rất đơn giản, dễ hiểu, đó là dùng List<bai> để mô phỏng bộ bài:
- Đầu tiên, tạo một list có 52 lá theo thứ tự, mô phỏng bộ bài lúc ban đầu.
- Để mô phỏng 4 tụ bài, ta tạo ra 4 list rỗng.
- Lần lượt bốc từng lá bài ngẫu nhiên trong bộ bài (random từ 0 -> boBai.Count - 1), phát đều cho mỗi tụ (Remove() khỏi bộ bài, Add() vào tụ cần chia).
- Lặp lại việc chia bài cho đến khi bộ bài hết bài.
Để tiện việc so sánh các quân bài, bạn có thể cho class bai cài đặt IComparable interface. Khi đó nếu cần sort các tụ bài, ta có thể dùng hàm Sort() của List.
dù sao cũng thanks! mà forum mình close topic làm sao nhỉ??? :-w
Comment
-
Nếu chỉ đổi random mà chạy được thì mình không hiểu thật.
Nhìn vòng lặp random:
do
{
q = ranq.Next(0, 13);
l = ranl.Next(0, 4);
} while (chia[l, q] == 1);//dieu kien: neu la bai chia roi thi lam lap lai thao tac
Thì nếu như chia không có bài nó sẽ treo chứ sao lại được 16 lá nhỉ?https://ledsieure.com - Tết rồi, mua đèn về trang trí đi
Comment
-
Originally posted by 11520104 View Posty chang ý tưởng ban đầu! cơ mà vấn đề của thớt là tìm + fix lỗi cái code trong #1 chứ k phải hỏi hướng làm bài!
dù sao cũng thanks! mà forum mình close topic làm sao nhỉ??? :-w
Nếu cài đặt thêm 1 hàm nhỏ để remove lá bài giống như trong List thì sẽ ok.Last edited by CH0901050; 22-02-2013, 10:05.
Comment
-
Originally posted by CH1101146 View PostNếu chỉ đổi random mà chạy được thì mình không hiểu thật.
Nhìn vòng lặp random:
do
{
q = ranq.Next(0, 13);
l = ranl.Next(0, 4);
} while (chia[l, q] == 1);//dieu kien: neu la bai chia roi thi lam lap lai thao tac
Thì nếu như chia không có bài nó sẽ treo chứ sao lại được 16 lá nhỉ?
Comment
Comment