Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: Tạo ngẫu nhiên trên C++ (hàm rand())

  1. #1
    Ngày gia nhập
    12 2008
    Bài viết
    25

    Mặc định Tạo ngẫu nhiên trên C++ (hàm rand())

    Trong một trò chơi đôi kháng, môi nhân vat đều co ba chi so là: Sức mạnh (SM), Linh hoạt (LH), Nội lực (NL). Đồng thời có ba loại quân là: Dung sĩ, Cung thủ, Pháp sư với các đặc trưng nhu sau:
    Dung si
    a. Các chi so co giá trj ngâu nhiên nhu sau: SM từ 15 đên 25, LH từ 5 đén
    15, NL từ 5 đén 15.
    b. Co Sinh lực(máu) gấp muời lần Sức mạnh (SL = SM x 10)
    c. Co Sức tan cong bang Sức mạnh (TC = SM)
    Cung thủ
    d. Các chi so co giá trj ngâu nhiên nhu sau: SM từ 5 dén 15, LH từ 15 dén
    25, NL từ 5 dén 15.
    e. Co Sinh lực(máu) gap mười lan Sức mạnh (SL = SM x 10)
    f. Co Sức tan cong bang Linh hoạt (TC = LH)
    g. Môi khi tan cong sẻ tấn công hai lan
    Pháp su
    h. Các chi so co giá trj ngâu nhiên nhu sau: SM từ 5 dén 15, LH từ 5 dén
    15, NL từ 15 dén 25.
    i. Co Sinh lực(máu) gap mười lần Sức mạnh (SL = SM x 10)
    j. Co Sức tấn cong bang Nội lực (TC = NL)
    k. Môi khi Pháp su bj tan cong, Pháp su sẻ né dược đồn tấn cong tiép theo.
    Vi dụ : khi Pháp su bj tan cong 4 lan thI Pháp su sé chi bj mat Sinh lực ở
    lan dau tiên và lan thứ ba.
    Yêu cau:
    • Hay tạo ra ngâu nhiên hai dội quân (A và B) môi bên gôm 5 quân vâi các loại quân được tạo ngâu nhiên.
    Đồng thời xuat ra loại quân cùng với 5 chi so SM, LH, NL, SL, TC của từng quân của hai bên
    • Thuc hiện A tan cong B, sau do B tan cong A. Nghia là quân dau tiên của đội
    A sẽ tan công quân dau tiên của đội B, sau do dén quân thứ hai của đội A sé tan cong quân thứ hai của đội B, … Và ngược lại: quân dau tiên của đội B sé tan
    cong quân dau tiên của đội A, sau đó đến quân thứ hai của dội B sé tan cong quân thứ hai của dội A.
    Môi khi co hai quân dánh nhau xuat ra màn hình loại quân nào dánh loại quân nào và xuat ra lượng Sinh lực bị mat hoặc né (néu lan tan cong do
    là lan tan cong chẳn vào quân Pháp sư)

    File .h

    Code:
    #include "stdlib.h"
    #include "time.h"
    #include "iostream"
    using namespace std;
    
    class Quan  
    {
    protected:
    	int m_iSucManh;
    	int m_iLinhHoat;
    	int m_iNoiLuc;
    	int m_iSinhLuc;
    	int m_iTanCong;
    public:
    	Quan();
    	virtual ~Quan();
    	virtual void Create();
        virtual void XuatQuan();
    	virtual void Attack();
    };
    
    class DungSi:public Quan
    {
    public:
    	void Create();
    	void XuatQuan();
    	void Attack();
    };
    
    class CungThu:public Quan
    {
    public:
    	void Create();
    	void XuatQuan();
    	void Attack();
    };
    
    class PhapSu:public Quan
    {
    public:
    	void Create();
    	void XuatQuan();
    	void Attack();
    };
    
    class DoiQuan
    {
    protected:
    	Quan *ds[100];
    public:
    	void Create();
    	void XuatQuan();
    };

    File.cpp

    Code:
    void Quan::XuatQuan()
    {
    	cout << "\t" << "Sinh Luc : " << this->m_iSinhLuc  << endl;
    	cout << "\t" << "Suc Manh : " << this->m_iSucManh  << endl;
    	cout << "\t" << "Noi Luc  : " << this->m_iNoiLuc   << endl;
    	cout << "\t" << "Tan Cong : " << this->m_iTanCong  << endl;
    	cout << "\t" << "Linh Hoat: " << this->m_iLinhHoat << endl;
    }
    
    void Quan::Create()
    {
    
    }
    
    void Quan::Attack()
    {
    	
    }
    
    void DungSi::Create()
    {
    	srand(time(NULL));
    
    	this->m_iSucManh  = rand()%11 + 15;
    	this->m_iLinhHoat = rand()%11 + 5;
    	this->m_iNoiLuc   = rand()%11 + 5;
    	this->m_iSinhLuc  = this->m_iSucManh * 10;
    	this->m_iTanCong  = this->m_iSucManh;
    }
    
    void DungSi::XuatQuan()
    {
    	cout << "Dung Si: " << endl;
    	Quan::XuatQuan();
    }
    
    void DungSi::Attack()
    {
    
    }
    
    void CungThu::Create()
    {
    	srand(time(NULL));
    
    	this->m_iSucManh  = rand()%11 + 5;
    	this->m_iLinhHoat = rand()%11 + 15;
    	this->m_iNoiLuc   = rand()%11 + 5;
    	this->m_iSinhLuc  = this->m_iSucManh * 10;
    	this->m_iTanCong  = this->m_iLinhHoat;
    }
    
    void CungThu::XuatQuan()
    {
    	cout << "Cung Thu: " << endl;
    	Quan::XuatQuan();
    }
    
    void CungThu::Attack()
    {
    	cout << "Attack!!!";
    }
    
    void PhapSu::Create()
    {
    	srand(time(NULL));
    
    	this->m_iSucManh  = rand()%11 + 5;
    	this->m_iLinhHoat = rand()%11 + 5;
    	this->m_iNoiLuc   = rand()%11 + 15;
    	this->m_iSinhLuc  = this->m_iSucManh * 10;
    	this->m_iTanCong  = this->m_iNoiLuc;
    }
    
    void PhapSu::XuatQuan()
    {
    	cout << "Phap Su: " << endl;
    	Quan::XuatQuan();
    }
    
    void PhapSu::Attack()
    {
    
    }
    
    void DoiQuan::Create()
    {
    	for(int i=1; i<=5; ++i)
    	{
    		srand(time(NULL));
    		int iLoai = (i/i)*(rand()%3 + 1);
    
    		switch(iLoai)
    		{
    		case 1:ds[i] = new DungSi;
    			break;
    		case 2:ds[i] = new CungThu;
    			break;
    		case 3:ds[i] = new PhapSu;
    			break;
    		}
    
    		ds[i]->Create();
    	}
    }
    
    void DoiQuan::XuatQuan()
    {
    	for(int i=1; i<=5; ++i)
    
    		ds[i]->XuatQuan();
    }
    mong các anh chỉ giúp em hàm tấn công của Cung thủ và pháp sư,thực hiện luôn việc tấn công,xuất ra mà hình.Đồng thời máy anh coi giup cho em cái hàm xuất DoiQuan.Khi em debug thì nó xuất ra đúng,nhưng em bám ctrl + f5 thì nó lại xuât ra cùng 1 loại quân.THANKS
    Đã được chỉnh sửa lần cuối bởi anhhaibi : 29-04-2009 lúc 09:28 PM.

  2. #2
    Ngày gia nhập
    04 2009
    Bài viết
    1

    Cậu học lớp CTT2,3 trường KHTN phải hông, mai mốt đừng đem nguyên si bài TH lên mà yêu cầu người ta làm dùm thế. 4rum này có rất nhiều tài liệu cho cậu tham khảo đấy, cậu mà học lớp thầy Khang chắc là bị chửi roài

    Tớ tạo nick chỉ để down tài liệu trên 4rum thôi, tại thấy cậu cùng khóa nên mới reply vài dòng đấy.
    1. abstract base class ko cần phải định nghĩa kiểu bưởi vậy đâu, chỉ cần thêm =0 vào cuối câu khai báo là đc. Xem lại nhé
    2. Phương thức Creat() có thể thay thế bằng PTTL mặc định đó cậu
    3. Cậu hỏi tại sao lại xuất ra có cùng 1 loại quân, thế thì cậu phải xem lại hàm srand() chứ. Tham khảo thêm thì chắc cậu thấy chỉ cần đặt srand() ở 1 chỗ là đc, ko cần phải đặt lắm thế
    4. Phương thức tấn công rất dễ cậu à, tự suy nghĩ nhé. Chỉ lấy sl = sl -tc thôi, thằng cung thủ thì tc*2. Ờ quên, có 1 TH duy nhất là thằng cung thủ sẽ chết đấy ( cái nì thì ko ai làm đâu, chỉ mình tớ phát hiện ra )
    5. Cái nì thì tớ chỉ hỏi thôi. Sao cậu lại dùng con trỏ trong Creat() thế, để bt vẫn đc mà

    @all : bọn em mới học năm nhất, học OOP hơi khác các anh chị chút ( về cái style ý ). Thế nên có gì thì bổ sung dùm bọn em nhá
    Đã được chỉnh sửa lần cuối bởi babylovefrv : 01-05-2009 lúc 02:29 PM.

  3. #3
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    1. Xem lại cách sử dụng base trong kế thừa
    2. Hàm Create hơi phức tạp; nghĩ thử giờ nếu thêm một unit mới vào đội hình hoặc chỉnh sửa info của 1 loại unit => sửa thủ công tất cả các con số à ???
    Thay vì thế, tạo một nhóm các hằng định nghĩa chỉ số nhân hay chỉ cố cộng của từng unit trong class của nó rồi đặt chỉ số làm tham số cho Create()
    3. Tấn công?
    Giả sử có 2 đội quân, mỗi đội 100 quân các loại.
    Khi tấn công, thì có 1 thằng đánh và 1 thằng đỡ.
    Vậy thì:
    Xác định mỗi loại unit khi attack sẽ bị trừ những điểm gì rồi áp dụng trên đối tượng.
    Ví dụ tớ lấy thằng DungSi
    giả sử là: SinhLuc = TanCong - PhongThu
    C++ Code:
    1. DungSi::Attack(Quan *__enemy)
    2. {
    3.     __enemy->SetSinhLuc(this->GetSucManh - __enemy->GetPhongThu);
    4. }

    Bài không khó, đơn giản là áp dụng cho đúng thôi và hơi phức tạp một chút chỗ xử lý khi chém nhau

    Cái này là style chuẩn C++ OOP chả khác gì hết.

    Mấy cậu được làm mấy bài này vui đó .
    None!

  4. #4
    Ngày gia nhập
    12 2008
    Bài viết
    25

    Hì mình hơi gà về lập trình nên củng muốn post bài lên để máy anh trên này coi chỉnh sửa lại cách viết hàm cho nó nhanh hơn,gọn hơn thôi.Mình sẽ cố gắng chỉnh sửa.có gì máy anh coi góp ý thêm.THANKS

  5. #5
    Ngày gia nhập
    03 2009
    Bài viết
    16

    Trích dẫn Nguyên bản được gửi bởi babylovefrv Xem bài viết

    1. abstract base class ko cần phải định nghĩa kiểu bưởi vậy đâu, chỉ cần thêm =0 vào cuối câu khai báo là đc.
    abstract base class = ????

    2. Phương thức Creat() có thể thay thế bằng PTTL mặc định đó cậu
    PTTL = ????
    3. Cậu hỏi tại sao lại xuất ra có cùng 1 loại quân, thế thì cậu phải xem lại hàm srand() chứ. Tham khảo thêm thì chắc cậu thấy chỉ cần đặt srand() ở 1 chỗ là đc, ko cần phải đặt lắm thế
    4. Phương thức tấn công rất dễ cậu à, tự suy nghĩ nhé. Chỉ lấy sl = sl -tc thôi, thằng cung thủ thì tc*2. Ờ quên, có 1 TH duy nhất là thằng cung thủ sẽ chết đấy ( cái nì thì ko ai làm đâu, chỉ mình tớ phát hiện ra )
    5. Cái nì thì tớ chỉ hỏi thôi. Sao cậu lại dùng con trỏ trong Creat() thế, để bt vẫn đc mà
    Dân CTT1 có khác, ăn nói đúng là hơn người nhỉ

  6. #6
    Ngày gia nhập
    12 2008
    Bài viết
    25

    Mặc định Tạo ngẫu nhiên trên C++ (hàm rand())

    Trích dẫn Nguyên bản được gửi bởi babylovefrv Xem bài viết
    Cậu học lớp CTT2,3 trường KHTN phải hông, mai mốt đừng đem nguyên si bài TH lên mà yêu cầu người ta làm dùm thế. 4rum này có rất nhiều tài liệu cho cậu tham khảo đấy, cậu mà học lớp thầy Khang chắc là bị chửi roài

    Tớ tạo nick chỉ để down tài liệu trên 4rum thôi, tại thấy cậu cùng khóa nên mới reply vài dòng đấy.
    1. abstract base class ko cần phải định nghĩa kiểu bưởi vậy đâu, chỉ cần thêm =0 vào cuối câu khai báo là đc. Xem lại nhé
    2. Phương thức Creat() có thể thay thế bằng PTTL mặc định đó cậu
    3. Cậu hỏi tại sao lại xuất ra có cùng 1 loại quân, thế thì cậu phải xem lại hàm srand() chứ. Tham khảo thêm thì chắc cậu thấy chỉ cần đặt srand() ở 1 chỗ là đc, ko cần phải đặt lắm thế
    4. Phương thức tấn công rất dễ cậu à, tự suy nghĩ nhé. Chỉ lấy sl = sl -tc thôi, thằng cung thủ thì tc*2. Ờ quên, có 1 TH duy nhất là thằng cung thủ sẽ chết đấy ( cái nì thì ko ai làm đâu, chỉ mình tớ phát hiện ra )
    5. Cái nì thì tớ chỉ hỏi thôi. Sao cậu lại dùng con trỏ trong Creat() thế, để bt vẫn đc mà

    @all : bọn em mới học năm nhất, học OOP hơi khác các anh chị chút ( về cái style ý ). Thế nên có gì thì bổ sung dùm bọn em nhá
    Vậy tại sao đặt hàm srand() nhiều chổ lại sai, bạn giải thích giùm mình coi.THANKS

  7. #7
    Ngày gia nhập
    03 2009
    Bài viết
    2

    cái dân CTT01 chẳng coi ai ra gì. Chẳng biết mình là ai. Cứ tưởng là mình trên mọi người. hahaha. bất bình xíu, nói tí thôi. spam roài

  8. #8
    Ngày gia nhập
    04 2009
    Bài viết
    1

    http://my.opera.com/laptrinhc/blog/sinh-sng-u-nhi-n
    <<<bạn coi cái này để hiểu thêm việc tạo ngẫu nhiên ^^

Các đề tài tương tự

  1. Thuật toán tìm số ngẫu nhiên ( không sử dụng hàm Rand)
    Gửi bởi jacking_nguyen1 trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 16
    Bài viết cuối: 11-11-2017, 09:04 PM
  2. Tạo biến ngẫu nhiên kiểu float sử dụng hàm rand() trong C/C++ như thế nào?
    Gửi bởi 50902116 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 24
    Bài viết cuối: 27-02-2014, 04:35 PM
  3. Bài tập C Tạo ngẫu nhiên mảng 2 chiều vuông 4X4 với các phần tử tạo ngẫu nhiên trong đoạn[0,50]
    Gửi bởi truongtrungviet trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 16
    Bài viết cuối: 16-04-2011, 08:06 AM
  4. Nhập ngẫu nhiên 1 ma trận bằng hàm rand()
    Gửi bởi kienchochethahaha trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 19-05-2010, 05:43 PM
  5. Lập trình C | Tạo mảng ký tự ngẫu nhiên trên C???
    Gửi bởi tnt288 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 16-05-2009, 03:47 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn