Giúp làm 1 game nhỏ

Liên hệ QC

hoangmai2605

Thành viên chính thức
Tham gia
27/2/09
Bài viết
92
Được thích
11
Xin chào Diễn đàn,
- Tui muốn học hỏi thêm về lệnh excel về tạo giá trị ngẫu nhiên trong 1 khoảng giá trị nào đó và 1 chút kiến thức về graphic bằng cách làm 1 game nhỏ "Quay số".
- Tui đã gởi file đính kèm, có hướng dẫn và các yêu cầu cụ thể.

Mong các bạn và các thầy trong diễn đàn hướng dẫn.
Rất mong được sự chỉ dẫn.
Chân thành cảm ơn diễn đàn.
 

File đính kèm

  • quayso.xls
    31.5 KB · Đọc: 42
Xin chào Diễn đàn,
- Tui muốn học hỏi thêm về lệnh excel về tạo giá trị ngẫu nhiên trong 1 khoảng giá trị nào đó và 1 chút kiến thức về graphic bằng cách làm 1 game nhỏ "Quay số".
- Tui đã gởi file đính kèm, có hướng dẫn và các yêu cầu cụ thể.

Mong các bạn và các thầy trong diễn đàn hướng dẫn.
Rất mong được sự chỉ dẫn.
Chân thành cảm ơn diễn đàn.
Mình chỉ làm được đến đây, còn vấn đề cho chữ nhấp nháy thì mình chưa làm được. Xin nhờ các bạn khác ra tay nhé!
 

File đính kèm

  • quayso.xls
    49 KB · Đọc: 44
Thêm 1 tham khảo

Mã:
Option Explicit
[B]Sub QuaySo()[/B]
 Dim Jj As Byte, wW As Long, Chon As Byte, Timer_ As Double
 Dim Rng As Range:                  Const Thay As Long = 4 * 10 ^ 5
 
 [L2].Resize(10).Interior.ColorIndex = 0
 For Jj = 1 To 10
   Randomize
   Chon = Jj * 10 - Int(Chon \ Jj + 9 * Rnd())
   Set Rng = Sheets("DS").Cells(Chon + 1, 1)
   [c5].Value = Rng.Value
   [C6].Value = Rng.Offset(, 1).Value
   [C7].Value = Rng.Offset(, 2).Value
   Timer_ = Timer:            [j2].Value = Chon - 1
   With [f6]
      .FormulaR1C1 = "=Chao":          .Font.ColorIndex = 2 + Jj
   End With
   Do
      If Timer - Timer_ > 5 Then Exit Do
      wW = wW + 1
      If wW > 10 ^ 7 Then wW = 0
      If wW Mod Thay = 0 Then _
         [f6].Font.ColorIndex = 3 + wW Mod 9
   Loop
   Cells(Jj + 1, "L").Interior.ColorIndex = 33 + Chon Mod 9
 Next Jj
 [f6].Value = ""
[B]End Sub[/B]
Sẽ chọn ra 10 trị khác nhau trong 100 mã từ A00..A99
 
Chỉnh sửa lần cuối bởi điều hành viên:
Xin chào Diễn đàn,
......
Mong các bạn và các thầy trong diễn đàn hướng dẫn.
Rất mong được sự chỉ dẫn.
Chân thành cảm ơn diễn đàn.

Xin chân thành cảm ơn sự chỉ dẫn của 2 bạn nghiaphuc và HYEN17 rất nhiều.
Qua 2 cách hướng dẫn này Tui học thêm được cách lấy giá trị ngâu nhiên trong 1 khoảng nào đó và về timer.

Các bạn nào trong diễn đàn biết cách cho dòng chữ nhấp nháy (trong file đính kèm ở #2) thì xin chỉ dẫn để Tui được học hỏi thêm.

Chân thành cảm ơn các bạn.
 
Bạn xem thử Ver 1.02

Xem trong file kèm theo --=0 :-= --=0
 

File đính kèm

  • GPE.rar
    34.1 KB · Đọc: 38

Cảm ơn bạn, cách nhấp nháy này thấy không ổn bạn ơi vì có cảm giác máy bị treo và kiểu này là bạn chuyển màu cho dòng chữ.
Tui nhớ ở ngôn ngữ lập trình nào đó mà Tui đã có xem qua có lệnh blink cho nhấp nháy chữ. Không biết trong tập lệnh excel có lệnh nào tương tự vậy không?
Thân chào bạn.
 
Cảm ơn bạn, cách nhấp nháy này thấy không ổn bạn ơi vì có cảm giác máy bị treo và kiểu này là bạn chuyển màu cho dòng chữ.
Tui nhớ ở ngôn ngữ lập trình nào đó mà Tui đã có xem qua có lệnh blink cho nhấp nháy chữ. Không biết trong tập lệnh excel có lệnh nào tương tự vậy không?
Thân chào bạn.
Tôi nghĩ bạn nên dùng UserForm sẽ hay hơn là chạy trên sheet
Xem bài viết này:
http://www.giaiphapexcel.com/forum/showthread.php?t=24123&page=2
Việc của bạn là nhập liệu và chạy code thôi
 
Mình chỉ làm được đến đây

Chào bạn,
Macro bạn làm đó chưa tính toán việc loại trừ.
VD: Trong chương trình sẽ quay số tổng cộng 5 lần.
Lần 1 : "001" đoạt giải thì lần 2 khi quay số thì việc lấy số ngẫu nhiên trong vòng lặp (10 lần) không được có "001".
Lần 2: "003" đoạt giải thì lần 3 khi quay số thì việc lấy số ngâu nhiên trong vòng lặp không được có "001" và "003"
.....

Theo mình nghĩ trong sheet DS sinh thêm cột FLAG, ở 1 giá trị i trong vòng lặp, khi lấy số ngẫu nhiên thì phải tiến hành search trong DS. Nếu maso = số ngẫu nhiên và ô tương ứng ở cột FLAG khác null thì phải tiến hành lấy số ngẫu nhiên khác (không được tăng i). Kết thúc vòng lặp (10 lần), người nào đoạt giải thì phải phải bật cờ của người đó lên (ô tương ứng trong cột FLAG trong sheet DS gán vào giá trị 1 chẳng hạn).

Mình có ý tưởng nhưng chưa viết code được, bạn có thể hướng dẫn để được học hỏi thêm nghe bạn.

Chân thành cảm ơn bạn và mong nhận được sự chỉ dẫn.
 
Chào bạn,
Macro bạn làm đó chưa tính toán việc loại trừ. . . .

Đúng là macro của NghaPhuc chưa ngừa trường hợp số ngẫu lặp lại, làm mất giải thưởng; Chuyện này dẫn đến việc CNV bị thiệt thòi & công đoàn hay . . . lợi không đán.

Để ngừa như vậy ta có thể dùng nhiều cách; Một trong những cách đó tác giả đã nêu;

(1) Để thực tiển hoá, có thể khai 1 biến mảng kiểu True/False, mà số fần tử = với số CNV trong DS

(2) Khai báo 1 biến chuỗi, như StrC & dùng vòng lặp gán nó trị lần lượt vô đầu hay cuối của chuỗi này, StrC="00010203040506. . . . .99"
Đồng thời khi chuỗi đủ dài (như Len(StrC)>20), ta cắt vứt bớt ngẫu nhiên 2 ký tự liên tục, bắt đầu từ vị trí lẻ.
Như vậy biến StrC luôn chỉ là 10 số (dạng chuỗi); Cuối cùng ta lấy 5 số từ nó sẽ như trở bàn tay í mà!

(3) Như macro có tại bài 2; Nhưng nó còn nhược điểm nho nhỏ; Nhược đó là những CNV đội sổ ít có dịp trúng thưởng hơn những người đầu danh sách; Bạn thử suy ngẫm xem mình nói có đúng không?!

(4) . . . .

Bạn cần cụ thể trường hợp nào không vậy?

Thân!
 
Lần chỉnh sửa cuối:
Đúng là macro của NghaPhuc chưa ngừa trường hợp số ngẫu lặp lại, làm mất giải thưởng; Chuyện này dẫn đến việc CNV bị thiệt thòi & công đoàn hay . . . lợi không đán.

Để ngừa như vậy ta có thể dùng nhiều cách; Một trong những cách đó tác giả đã nêu;

Bạn cần cụ thể trường hợp nào không vậy?

Thân!

Tui muốn dùng macro của nghiaphuc và ngừa sự trùng lắp theo hướng suy nghĩ của mình. Bạn có thể giúp mình viết code để mình học hỏi thêm. (File đính kèm ở #2)
Xin lỗi bạn nghe, vì mình đang theo luồng suy nghĩ của mình. Xong rồi mình sẽ đi theo hướng khác bạn chỉ.

Thân chào bạn.
 
Cùng hướng đi thôi, nhưng không chìu bạn hết được

PHP:
Option Explicit
Sub QuaySo()
    Dim i As Byte, StrC As String, Rng As Range, SoNgau As Byte, jJ As Byte
    
    StrC = "GPE.COM"
    With Sheet2
        .[C5:F7,I2:J2].ClearContents
        For i = 1 To 10
            Application.Wait Now + TimeValue("0:00:01")
            .[I2] = .Cells(i + 1, 12)
            For jJ = 1 To 11 + i      '<=|'
9               Randomize:           SoNgau = Int(Rnd * 100) + 1
               If InStr(StrC, SoNgau) < 1 Then
11                  .[J2] = SoNgau:      StrC = StrC & SoNgau
                  Exit For
13               End If
            Next jJ    '<=|'
        Next
        .[C5] = "'" & Right("000" & .[J2], 3)
        
        Set Rng = Sheet1.[A:A].Find(What:=.[C5], After:=Sheet1.[A2], _
            LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlNext)
            
        .[C6] = Rng.Offset(0, 1).Value
        .[C7] = Rng.Offset(0, 2).Value
        .[F6] = "Congratulation! You're the winner"
        .[F6].Font.ColorIndex = Int(Rnd * 56) + 1
    End With

End Sub
 
Lần chỉnh sửa cuối:
PHP:
Option Explicit
Sub QuaySo()
    Dim i As Byte, StrC As String, Rng As Range, SoNgau As Byte, jJ As Byte

Trước tiên xin cảm ơn bạn rất nhiều. Vì mắc bận làm công việc khác nên chưa tiếp tục làm game này được bạn ạ. Chắc chắn mình sẽ hỏi bạn sau về đoạn code mà bạn tạo này.

Thân chào bạn
 
Web KT
Back
Top Bottom