Event [Tinsoft] Cuộc thi ROBOWAR - Xin mời các coder MMO LÂU NĂM và MỚI tham gia xả stress nhé

Status
Not open for further replies.

sonytuan

Junior
Pre-verified
Joined
May 9, 2014
Messages
224
Reactions
292
MR
0.070
$500.00
Services
Chat with me via Skype
Chào các bạn, với mục đích code giải trí, nay team mình xin mạo muội tổ chức 1 cuộc thi nho nhỏ dành cho các bạn đã và đang học code (ngôn ngữ mình chọn là C# , vì theo tham khảo thì có lẽ đây là ngôn ngữ nhiều người biết nhất MMO)

Vào thẳng cách tham gia luôn nhé :

- Các bạn download file Class mẫu ở đây : http://www.mediafire.com/download/nixnnd1la3u3as0/YourRobot.cs
- Import vào 1 Application bất kỳ, rồi sử dụng các hàm có sẵn trong Class để lập trình nhé.

- Đối với các bạn chưa biết code, các bạn có thể tham khảo cách tạo 1 ưng dụng và các thao tác cơ bản trên VS ở topic của a @tunvit :https://mmo4me.com/threads/lop-hoc-lap-trinh-bai-1-lan-dau-lam-chuyen-ay.254477/
Sau khi học các video này thì các bạn hoàn toàn có thể tạo cho mình 1 con Robot bá cháy rồi ;), thắng được cái ông dạy trong video là chuyện trong tầm tay nhé :D:D .Mình sẽ hỗ trợ code cho các bạn nếu cần giải thích những vấn đề liên quan tới con này, mạnh dạn lên , đến lúc các bạn thực hành rồi.
- Những coder thâm niên hơn thì mình cũng không biết nhiều, vậy nhờ các bạn có biết ai có nhu cầu tham gia thì tag vào giúp mình nhé. Ở đây mình xin tag các ace mà mình được biết @VinaCaptcha , @tunvit , @gmailservice nếu có làm phiền xin được thứ lỗi :(.

-Về luật code:
+ Không tác động lên robot đối phương, chỉ được lấy vị trí, và bắn, ko được cheat vào để làm cho robot đối phương bị hỏng. Không chạy các loại lệnh bắn 1 phát chết ngay :confused:
+ Không chạy các lệnh can thiệp vào hệ thống windows và Application gốc (VD : Xóa sạch ổ đĩa, thả virut vào máy, close phan mềm, mở nhạc hát inh ỏi... ), khúc này loại luôn nha.:D
+ Không import 1 DLL nào khác, chỉ dùng các hàm có sẵn của .NET 4.5.
+ Nói túm lại nên sài các hàm for,while, if, hàm tính toán sin cos tang cho dễ hiểu nhau hen :rolleyes:..

Vì lần đầu tạo trò chơi nên luật nghĩ sao viết vậy, thiếu xót gì anh em bổ sung mình edit thêm cho công bằng nha :) .

-Về cách tham gia:
+ Các bạn lập trình trong hàm run(){ } trong Class có sẵn, sau đó gởi lại file sau khi lập trình cho mình vào email : [email protected] .
+ Mình sẽ dựa vào tổng số các bài hợp lệ và bốc thăm chia bản đấu vòng loại, hình thức đấu loại trực tiếp, thắng vào vòng trong.
+ Nếu bài tham gia quá đông thì vòng loại sẽ đấu theo hạng cân (dựa vào số byte code).
+ Hai TANK robot sẽ được thả chung vào 1 sân do bên mình tạo ra, tự động bắn đến khi phân định thắng thua. 1 hiệp duy nhất.
+ Hỗ trợ các bạn chạy thử code và các hàm tính toán khi mình online topic.
+ Hạn chót gởi code là 12 giờ trưa Chủ nhật 11/10.
+ Thi đấu tổ chức vào 8 giờ tối chủ nhật 11/10, mình sẽ cố gắn live stream cho các bạn theo dõi các trận.
+ Sau vòng loại,các bạn vào vòng trong sẽ được update code cho vòng tiếp theo.

-Cách chơi :
+ Hai xe tank sẽ có vị trí xuất phát đối xứng nhau trên bản đồ, nhiệm vụ: chạy, né đạn , nhắm bắn đối phương, tìm và ăn các bình máu xuất hiện vị trí random.
+ 1 trận tối đa 5 phút. sau 5 phút ko có ai hết máu thì robot ít máu hơn sẽ là con thua (Thời gian có thể thay đổi ở các vòng sau cho hợp lý)

- Về thông số :

33DKeBTQ3oH9YVqYer1SeJW_gL6yFvMyZNhCjLiCYBTsue8oq9fRfayDP2hbMCrCAZ5mtR2uY_G81cjWDyqoz5cTUNceAyOFY4iG2wPQ4C-ueavgfX6ccW9yQPysrlGvl46AXLp9H_2lQxY0d0tUxP_3HGf0for6yCHBYFnnyxkRUPOYDkKgMShqEdCe4008HDwqtMfnwCxRKcmEw1tgrvXM1pYhV4wFWlUuL3F2KOm-eVApB-ajNVJqvaLTez36DQUKEXlJE8RjF1ftZ-dnSmhUo8GsdEaOe3ArxPT7bikITiLw_O_b74982YkqnpmYh9EdaU08ywRSVRAsjp17SdBPIgdCdObFycIXSoDM8dQHhaShf639PFH_09HcDBWCh4C3rAJ0UZWurdB3e1CceXwosnrw215r7wiXgI2dk3kcA8buCJtroG3tun0mKkjsMZ3VU5KYOxuEtIdStcddbhG3iM2pt3F6LvMur7QANJ9GwbbAPLvyebHd3bb8_ejWA69cyKa4lMiBEorBln18CwbsSEo-IoPr099XknFzgJU=w594-h320-no


- Vật cản: hiện tại chỉ làm 4 góc tường cho dễ chơi.

- Các hàm hỗ trợ sẵn:

Code:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace War_Of_Tank___Tinsoft
{
    class YourRobot
    {


        public Point[] getHealStone()
        {
            return new Point[]{};
            // Trả về mảng các tọa độ bình máu . Kiểu trả về Point, các bạn có thể lấy tọa độ x, y bằng cách lấy kết quả trả về chấm X, hoặc Y
        }
        public Point getEnemyPoint()
        {
            return new Point(0,0);
            // Trả về tọa độ hiện tại đối phương, lấy ngay tâm.

        }
        public Boolean canShoot()
        {
            return true;
            // 1 viên đạn bắn ra phải chờ 0.5 s mới bắn duoc tiếp, dùng hàm này đẻ check có thể bắn dc hay không.
        }
        public int getEnemyAlpha()
        {
            return 0;
            // Trả về góc xoay hiện tại của xe địch, tính từ góc 0 là chiều dương trục X. (Theo hình)
        }
        public Point getMyPoint()
        {
            return new Point(0, 0);
            // tra ve toa do hien tai cua xe ta.
        }
        public int getMyAlPha()
        {

            return 0;
            // tra ve goc Alpha hien tai cua xe ta.
        }

        public float getStageHeight()
        {
            return 0;
            //tra ve chieu cao (truc Y) cua san dau
        }
        public float getStageWidth()
        {
            return 0;
            //tra ve chieu dai (truc X) cua san dau
        }

        public int getEnemyDirection()
        {
            return 0;
            //tra ve góc chênh lệnh giữa ta và địch, mình viết sẵn hổ trợ luôn, chỉ cần gọi hàm này lấy kết quả cho vào hàm rotate là quay súng luôn đến đối phương, tất nhiên là bắn doi phuong đang di chuyển thì khó trúng rồi
        }
        public int getDirectionByPoint(Point tagetPoint)
        {
            return 0;
            //tra ve góc chênh lệnh giữa ta va tagetPoint

        }
        public string getHitWall()
        {

            return "";//tra ve: 0: Bình thường ; left,right,top,bot : đụng 1 trong bốn tường theo thứ tự ; enemy: đụng đối phương
        }
       public int getMyHeal(){
           return 0;
           //trả về số máu hiện tại của ta
          }
  
         public int getEnemyHeal(){
           return 0;
           //trả về số máu hiện tại của địch
          }

        public void stop(int time)
        {

            //dung lai time/1000 giay;

        }

        public void rotate(float anpha)
        {
            //Xoay xe 1 góc  anpha. Giới hạn nhập vào  :  -360<anpha<360 , lưu ý, nhập lớn hơn hay nhỏ hơn thì ko xoay nhé

        }

        public void shoot()
        {
            // Bắn 1 viên đạn về phía trước,

        }
        public void move(float distance)
        {

            //di chuyển về phía trước distance pixels ; gia tri nhap vao : distance>0. Khi đụng tường, hoặc đụng địch, sẽ bị dừng lại. Chú ý ko để bị đối phương ép góc nhé.

        }


        public void run()
        {
            //************************************************************
            // code robot cua ban lap trinh o day.

          // chú ý, từng code chạy từng động tác 1, vd :rotate(45); move(100); shoot(); :quay góc 45 độ, di chuyển tới 100 pixels, bắn.
            //************************************************************


            /* code mau * CHU Y, CODE MAU NAY RAT DOT, DEM DI DANH NHAU -> THUA CHAC
            Random ran = new Random();
            move(10); // toi truoc 10 pixels
            rotate(90); // quay 90 do
            while (true) // tao vong lap de robot xu ly lien tuc, den khi ket thuc tran dau, phan mem se tu dung no lai
            {

                move(ran.Next(10, 300)); // toi truoc random 1 khoang cach tu 10-300
                Point[] heal = getHealStone(); // lay tat ca cac diem bom mau
                if (heal.Length > 0) // neu mang tra ve khong rong
                {
                    Point mau = heal[ran.Next(0, heal.Length)]; // chon random 1 cot mau
                    rotate(getDirectionByPoint(mau)); ; // quay robot ve huong cot mau da chon
                    for (int i = 0; i < 5; i++) // tao vong lap 5 lan
                    {
                        move(100); // di ve phia anpha 1 doan 100 pixel
                        rotate(getEnemyDirection()); // quay ve huong dich
                        shoot(); //ban
                        rotate(getDirectionByPoint(mau)); // quay ve huong cot mau
                    }
                    move(100); //di chuyen 100

                }
                else // neu khong co cot mau
                {
                    move(ran.Next(20, 200)); //di chuyen random
                    rotate(getEnemyDirection()); // quay ve phia dich
                    shoot(); // ban
                    rotate(ran.Next(20, 360)); //quay random
                }



            }

            */


        }

    }
}

Về giải thưởng:
- Giải sẽ được trao khi giải đấu kết thúc,
- Hiện tại chỉ có 1 giải nhất trị giá 500k , Rất hi vọng sự ủng hộ thêm của các nhà hảo tâm cho giải thưởng thêm phong phú. Không có cũng không sao, hi vọng anh em tham gia vui là chính.
Bạn nào cần hỗ trợ code thì lập topic trong mục CHAT rồi tag mình vào nhé, cả chạy thử code nữa. tập trung 1 topic thôi hỗ trợ cho dễ nha mọi người. Xin cảm ơn và hãy nói yêu thương, đừng buôn lời cay đắng ;);).

* Cập nhật : Giải thưởng có thêm 200k từ nhà tài trợ [B]@tunvit[/B] . Rất cảm ơn anh :) , tên các nhà tại trợ sẽ được cập nhật trên màn hình chính của game .
- Thêm 2 hàm : getMyHeal() : hàm này trả về số máu hiện tại của tank
và hàm getEnemyHeal() ; trả về số máu địch.
- Giải thưởng đã thêm 200k từ anh @VinaCaptcha . Xin cảm ơn anh nhiều.

- Giải thưởng đã thêm 200k từ anh @lexus4464 . Xin cảm ơn anh nhiều.

-Tổng giải thưởng hiện tại là 1.100.000 VND
-Update hạn chót giao code là 12h chủ nhật ngày 11/10 do 1 vài bạn vẫn chua kịp hoàn thành. Mọi người thông cảm nhé

Topic để các bạn thảo luận code ở đây nha:
https://mmo4me.com/threads/huong-dan-tao-1-robo-tank-tham-gia-event-va-ho-tro-chay-thu-code.269170/



Video hướng dẫn:



Video demo 2 robot di chuyển random và ngắm bắn. (10 dòng code)



Code:
 move(10);
            rotate(90);
            while (true)
            {
               
                    move(ran.Next(10, 300));
                    Point[] heal = getHealStone();
                    if(heal.Length>0)
                    {
                        Point mau= heal[ran.Next(0,heal.Length)];
                        rotate(getDirectionByPoint(mau)); ;
                        for (int i = 0; i < 5;i++ ) {
                            move(100);
                            rotate(getEnemyDirection());
                            shoot();
                            rotate(getDirectionByPoint(mau));
                        }
                        move(100);
                      
                    }
                    else {
                        move(ran.Next(20, 200));
                        rotate(getEnemyDirection());
                        shoot();
                        rotate(ran.Next(20, 360));
                        }
               
               
               
            }
 
Last edited:

quentenroi

Junior
Joined
Nov 12, 2014
Messages
146
Reactions
165
MR
0.001
kiểu viết AI cho mấy cái tanks à thới :eek: mới đọc sơ qua nên chưa hiểu lắm
 
thêm hàm getMyHeal() nữa đi thớt, hàm này trả về số máu hiện tại của tank :D

và hàm getEnemyHeal(), hàm này trả về số máu hiện tại của tank đối thủ
 
thêm hàm getMyHeal() nữa đi thớt, hàm này trả về số máu hiện tại của tank :D

và hàm getEnemyHeal(), hàm này trả về số máu hiện tại của tank đối thủ
Đã thêm nha :) . Hàm này dùng để quyết định xem có nên đứng bắn solo ko và có nên đi ăn máu ko :cool:
 
Status
Not open for further replies.

Announcements

Forum statistics

Threads
426,779
Messages
7,185,790
Members
179,137
Latest member
choigamehaynet

Most viewed of week

Most viewed of week

Back
Top Bottom