Tin học Game Đua xe viết bằng Pascal

Thảo luận trong 'Lập trình game- android,ios' bắt đầu bởi trà nguyễn hữu nghĩa, 12 Tháng hai 2019.

Lượt xem: 799

  1. trà nguyễn hữu nghĩa

    trà nguyễn hữu nghĩa Cựu Phó Nhóm Vật Lí |Cây bút Thơ|Thần tượng VH Thành viên

    Bài viết:
    3,028
    Điểm thành tích:
    629
    Nơi ở:
    Phú Yên
    Trường học/Cơ quan:
    Trường THPT Lương Văn Chánh
    Sở hữu bí kíp ĐỖ ĐẠI HỌC ít nhất 24đ - Đặt chỗ ngay!

    Đọc sách & cùng chia sẻ cảm nhận về sách số 2


    Chào bạn mới. Bạn hãy đăng nhập và hỗ trợ thành viên môn học bạn học tốt. Cộng đồng sẽ hỗ trợ bạn CHÂN THÀNH khi bạn cần trợ giúp. Đừng chỉ nghĩ cho riêng mình. Hãy cho đi để cuộc sống này ý nghĩa hơn bạn nhé. Yêu thương!

    Code đây nha :
    Mã:
     Program Duaxe;
     uses crt,dos;
     const
          width = 35;
          high = 24;
          Soduong = 12;
          tgchay = 100;
          Soxe = 5;
    
          Up = #72;
          Down = #80;
          Left = #75;
          Right = #77;
          Boom = #32;
          ESC = #27;
          PauseS = 'd';
          PauseB = 'D';
    
          V_Life = 3;
          V_Clear = 1;
          V_Money = 2;
          V_Bom = 0;
    
          SoItem = 5;
          Items : array[1..SoItem] of string =
          ('    New Game    ','    Continue    ','      Help      ',
          '     Sound:     ','      Quit      ');
    
     type Xe = object
          x,y: integer;
          mau,maucabin: Word;
          tgxe: longint;
     Procedure InXe;
     Procedure XoaXe;
     Procedure DiChuyen(k: char);
               end;
     type Vatpham = object
          x,y: integer;
          name: integer;
          tgvp: integer;
     Procedure InVatpham;
     Procedure XoaVatpham;
     Procedure Dichuyen;
                    end;
    
     var XeC: xe;
         k: char;
         duong,tgduong: longint;
         XeD: array[1..soxe] of xe;
         VP: array[1..Soxe] of Vatpham;
         Tainguyen: array[0..3] of integer;
         Chet,Onsound: Boolean;
         Diem: longint;
    
     procedure setcusor(bot,top: byte);
     var regs : registers;
     begin
     regs.ah :=1;
     regs.ch:=bot;
     regs.cl:=top;
     intr($10,regs);
     end;
    
     Procedure Psound(f,t: longint);
     Begin
          if OnSound then begin Sound(f);delay(t);nosound;end;
     End;
    
     Procedure DuongDi;
     var i,kduong: integer;
     Begin
          if duong = 1 then kduong := 0 else kduong := 1;
          for i := 1 to soduong do
          begin
               Textcolor(white);
               gotoxy(width div 2 + 1,i*2-duong);
               write('Û');
               gotoxy(width div 2 + 1,i*2-kduong);
               write(' ');
          end;
          if duong = 1 then duong:= 0 else duong := 1;
     End;
    
     Procedure InManHinh;
     var i,j: integer;
     Begin
          textbackground(green);
          for i := 1 to width do
          for j := 1 to high do
              begin gotoxy(i,j); write(' '); end;
          textbackground(black);
          gotoxy((width - 20) div 2,high+1);
          TextColor(Red);
          write('R A C I N G   ');
          TextColor(Brown);
          Write('G A M E');
          textbackground(green);
     End;
    
     Function XeDVaCham(i: integer): Boolean;
     var j: integer;
     Begin
          XeDVacham := False;
          for j := 1 to SoXe do
          begin
               if i <> j then
               if ((XeD[i].X >= XeD[j].X) and (XeD[i].X <= XeD[j].X+3))
               or ((XeD[j].X >= XeD[i].X) and (XeD[j].X <= XeD[i].X+3)) then
               XeDVaCham := True;
               if (XeD[i].X <= width div 2 +1) and (XeD[i].X+3 >= width div 2 +1)
               then XeDVaCham := True;
          end;
     End;
    
     Procedure TaoXeDich(i: integer);
     Begin
          repeat
                XeD[i].X := 1 + Random(width - 6);
          until not XeDVaCham(i);
          XeD[i].Y := 2;
          XeD[i].Mau := 3 + random(7);
          XeD[i].tgxe := 0;
          repeat
                XeD[i].MauCabin := 3 + Random(7);
          until XeD[i].Mau <> XeD[i].MauCabin;
          XeD[i].InXe;
     End;
    
     Procedure TaoVatpham(i: integer);
     Begin
          VP[i].X := 1 + Random(width - 6);
          VP[i].Y := 1 + Random(10);
          VP[i].Name := random(16) div 5;
          VP[i].InVatPham;
     End;
    
     Procedure Clear;
     var i: integer;
     Begin
          for i := 1 to Soxe do
              if ((XeD[i].X >= XeC.X) and (XeD[i].X <=XeC.X+3))
              or ((XeD[i].X+3 <= XeC.X+3) and (XeD[i].X+3 >=XeC.X))
              then begin XeD[i].XoaXe;TaoXeDich(i);end;
     End;
    
     Procedure Xe.InXe;
     Begin
          textcolor(Mau);
          gotoxy(x,y);  write(' ÛÛ ');
          gotoxy(x,y+1);write('Þ  Ý');
          gotoxy(x,y+2);write(' ÛÛ ');
          Textcolor(White);
          gotoxy(x,y);write('0');
          gotoxy(x+3,y);write('0');
          gotoxy(x,y+2);write('0');
          gotoxy(x+3,y+2);write('0');
          Textcolor(Maucabin);
          gotoxy(x+1,y+1);write('ÛÛ');
     End;
    
     Procedure Xe.XoaXe;
     Begin
          Gotoxy(x,y);  write('    ');
          Gotoxy(x,y+1);write('    ');
          Gotoxy(x,y+2);write('    ');
     End;
    
     Procedure Xe.DiChuyen(k: char);
     Begin
          XoaXe;
          case k of
               Down: if y < high - 2 then Inc(y);
               Up: if y > 1 then Dec(y);
               Left: if x > 1 then Dec(x);
               Right: if x < width - 3 then Inc(x);
               Boom: if TaiNguyen[V_Clear] > 0 then
                     begin Clear;Dec(Tainguyen[V_Clear]);end;
          end;
          InXe;
     End;
    
     Procedure Vatpham.InVatpham;
     Begin
          gotoxy(x,y);
          case name of
          V_Life: begin textcolor(red);write(#3);end;
          V_Clear: begin textcolor(Cyan);write(#15);end;
          V_Money: begin textcolor(Yellow);write('@');end;
          V_Bom: begin textcolor(Black);write('ê');end;
                    end;
     End;
    
     Procedure Vatpham.XoaVatpham;
     Begin
          gotoxy(x,y);write(' ');
     End;
    
     Procedure Vatpham.DiChuyen;
     Begin
          XoaVatpham;
          inc(Y);
          InVatPham;
     End;
    
     Procedure XedichChay;
     var i: integer;
     Begin
          for i := 1 to Soxe do
          begin
               inc(XeD[i].tgxe);
               if XeD[i].tgxe >= TgChay+i*10 then
               begin
                    XeD[i].Dichuyen(Down);
                    XeD[i].TgXe := 0;
               end;
               if XeD[i].Y >= high - 2 then
               begin XeD[i].XoaXe;TaoXeDich(i);end;
          end;
     End;
    
     Procedure VatPhamChay;
     var i: integer;
     Begin
          for i := 1 to Soxe do
          begin
               inc(VP[i].tgvp);
               if VP[i].tgvp >= TgChay then
               begin
                    VP[i].Dichuyen;
                    VP[i].Tgvp := 0;
               end;
               if VP[i].Y >= high then
               begin VP[i].XoaVatPham;TaoVatPham(i);end;
          end;
     End;
    
     Procedure AnVatPham;
     var i: integer;
     Begin
          for i := 1 to Soxe do
          if (VP[i].X >= XeC.X) and (VP[i].X <= XeC.X+3)
          and (VP[i].Y >= XeC.Y) and (VP[i].Y <= XeC.Y + 2) then
          begin
               if VP[i].Name <> V_Bom then
               begin
                    Psound(1000,50);
                    Inc(Tainguyen[VP[i].Name]);
                    VP[i].XoaVatPham;
                    TaoVatPham(i);
               end
               else begin
                         PSound(350,150);Chet := True;
                    end;
          end;
     End;
    
     Procedure KhoiTao;
     var i: integer;
     Begin
          Randomize;
          xeC.X := width div 2 - 1;
          XeC.y := high - 5;
          XeC.Mau := Blue;
          XeC.Maucabin := Yellow;
          duong := 0;
          tgduong := 0;
          Chet := False;
          for i := 1 to Soxe do
          begin
               TaoXeDich(i);
               TaoVatpham(i);
          end;
     End;
    
     Procedure VaCham;
     var i: integer;
     Begin
          for i := 1 to Soxe do
          if (((XeD[i].X >= XeC.X) and (XeD[i].X <= XeC.X+3))
          or ((XeD[i].X+3 <= XeC.X+3) and (XeD[i].X+3 >= XeC.X)))
          and (((XeD[i].Y >= XeC.Y) and (XeD[i].Y <= XeC.Y+2))
          or ((XeD[i].Y+2 <= XeC.Y+2) and (XeD[i].Y+2 >= XeC.Y))) then
          begin
               Chet := True;
               Psound(350,150);
               break;
          end;
     End;
    
     Procedure NewGame;
     Begin
          TextBackGround(Black);
          SetCusor(32,0);
          clrscr;
          KhoiTao;
          TaiNguyen[V_Life] := 1;
          TaiNguyen[V_Clear] := 3;
          TaiNguyen[V_Money] := 0;
          Diem := 0;
     End;
    
     Procedure InGiupDo;
     Begin
          TextBackground(lightgreen);
          clrscr;
          TextColor(White);
          Writeln(#24,': Up');
          Writeln(#25,': Down');
          Writeln(#26,': Right');
          Writeln(#27,': Left');
          Writeln('Space: Clear In Line');
          writeln('D: Pause Game and Continue Game');
          Textcolor(Red);
          Writeln(#3,': Life');
          Textcolor(Blue);
          Writeln(#15,': Bullet');
          TextColor(Yellow);
          Writeln('@: Money');
          Textcolor(Black);
          Writeln(#234,': Bom');
          Textcolor(Red+Blink);
          Writeln('Press ESC to back Menu...');
          repeat
          until readkey = ESC;
          TextBackground(black);
          clrscr;
     End;
    
     Procedure SetSound;
     Begin
          Textbackground(black);clrscr;
          repeat
                Textcolor(White);
                gotoxy(1,1);
                Write('Sound: ');
                if onsound then write('on ') else write('off');
                TextColor(Cyan);
                gotoxy(1,2);write('Press Enter to change sound!');
                Textcolor(Brown+Blink);
                Gotoxy(1,3);write('Press ESC to back Menu...');
                k := #0;
                if keypressed then k := readkey;
                if k = #13 then
                      if onsound then onsound := false else onsound := true;
          until k = ESC;
    
     End;
    
     Procedure InThongTin;
     Begin
          TextBackGround(Black);
          Gotoxy(Width+15,2);
          TextColor(Red+Blink);
          Write(' R A C I N G ');
          TextColor(Brown+Blink);
          Write(' G A M E ');
    
          TextBackGround(Cyan);
          TextColor(Black);
          Gotoxy(Width + 10,5);Write('Score: ',diem,'  ');
          TextColor(Red);
          Gotoxy(Width + 10,7);Write('Life: ',Tainguyen[V_Life],'  ');
          TextColor(Blue);
          Gotoxy(Width + 10,9);Write('Bullet: ',TaiNguyen[V_Clear],'  ');
          TextColor(Yellow);
          Gotoxy(Width + 10,11);Write('Money: ',Tainguyen[V_Money],'  ');
          TextColor(White);
          TextBackground(Black);
          Gotoxy(Width + 10,17);Write('Game made by Tra Nguyen Huu Nghia');
          Gotoxy(Width + 10,18);Write('Fb: fb.com/nghia.lvc');
          TextBackground(Green);
     End;
    
     Procedure GameOver;
     var i: integer;
     Begin
          for i := 1 to 60 do
          begin
               gotoxy(1,12);clreol;
               TextBackGround(Cyan);
               TextColor(Red);
               gotoxy(i,12);write('G A M E  O V E R');
               Psound(i*10,50);
               delay(25);
          end;
          for i := 60 downto 30 do
          begin
               gotoxy(1,12);clreol;
               TextBackGround(Cyan);
               TextColor(Red);
               gotoxy(i,12);write('G A M E  O V E R');
               Psound((60-i)*10,50);
               delay(25);
          end;
          TextColor(Red+Blink);
          gotoxy(i,12);write('G A M E  O V E R');
          Delay(2000);
     End;
    
     Procedure Main;
     var i: integer;
     Begin
          TextBackground(Black);
          clrscr;
          InManHinh;
          XeC.InXe;
          repeat
                InThongTin;
                if keypressed then
                begin
                     k := readkey;
                     if (k = PauseS) or (k = PauseB) then
                     repeat
                           k := #0;
                           if keypressed then k := readkey;
                     until (k=PauseS) or (k=PauseB) or (k = ESC);
                     Xec.Dichuyen(k);
                end;
                inc(tgduong);
                XedichChay;
                VatPhamChay;
                AnVatPham;
                VaCham;
                if chet then
                begin
                     Dec(TaiNguyen[V_Life]);
                     Chet := False;
                     KhoiTao;
                     InManHinh;
                     XeC.InXe;
                end;
                if tgduong >= Tgchay then
                begin
                     duongdi;
                     Inc(Diem);
                     tgduong := 0;
                end;
          until (k = ESC) or (TaiNguyen[V_Life] < 0) ;
          if k <> ESC then Gameover;
     End;
    
     Procedure Menu;
     var x0,y0,y,i: integer;
     Begin
          y0 := 8;
          x0 := 30;
          y := 1;
          onsound := true;
          repeat
          TextBackground(black);
          SetCusor(32,0);
          clrscr;
          Gotoxy(X0-3,Y0-2);
          TextColor(Red+Blink);
          TextBackGround(Cyan);
          Write(' R A C I N G ');
          TextColor(Cyan+Blink);
          TextBackground(Red);
          Write(' G A M E ');
    
          Gotoxy(X0+4,Y0);
          TextColor(Yellow);
          TextBackground(Green);
          Write(' M E N U ');
          repeat
          k := #0;
          if keypressed then k := readkey;
          case k of
          Up: if y > 1 then begin Dec(y);PSound(1000,50);end;
          Down: if y < Soitem then begin Inc(y);PSound(1000,50);end;
                 end;
          for i := 1 to soItem do
          begin
               Gotoxy(X0,Y0+i*2);
               TextColor(Black);
               if i = y then TextBackground(Brown) else TextBackground(LightGray);
               Write(Items[i]);
          end;
          until (k = #13);
          TextBackground(Black);
          case y of
          1: begin NewGame;Main;end;
          2: if not chet then Main;
          3: InGiupDo;
          4: SetSound;
          5: chet := True;
                 end;
          until chet;
     End;
    
     BEGIN
          NewGame;
          Menu;
     END.
    Code Game này cũng khá dễ, bạn nào muốn có thể thay đổi cả Menu cũng được
    Game này cực kỳ đẹp luôn nha, Demo cái Menu là biết liền à :D:
    upload_2019-2-12_14-21-54.png
     
    anoymous, Axiore_Ro, Thắng Lê13 others thích bài này.
  2. Lê Quang Đông

    Lê Quang Đông Banned Banned Thành viên

    Bài viết:
    772
    Điểm thành tích:
    136
    Nơi ở:
    Đồng Tháp
    Trường học/Cơ quan:
    trường TRUNG HỌC CƠ SỞ THANH BÌNH

    upload_2019-2-21_18-35-16.png
    Thú vị thật anh ạ!
    Nhưng chơi ròi chả biết cách thoát!
     
  3. Valhein AIC

    Valhein AIC Học sinh Thành viên

    Bài viết:
    52
    Điểm thành tích:
    21
    Nơi ở:
    Khánh Hòa
    Trường học/Cơ quan:
    Magic school

    Tắt nó luôn
     
  4. trà nguyễn hữu nghĩa

    trà nguyễn hữu nghĩa Cựu Phó Nhóm Vật Lí |Cây bút Thơ|Thần tượng VH Thành viên

    Bài viết:
    3,028
    Điểm thành tích:
    629
    Nơi ở:
    Phú Yên
    Trường học/Cơ quan:
    Trường THPT Lương Văn Chánh

    Bạn thử bấm ESC xem có thoát không nha...nếu không thì chờ chết v :p
     
  5. Chris Master Harry

    Chris Master Harry Học sinh gương mẫu Thành viên

    Bài viết:
    1,883
    Điểm thành tích:
    376
    Nơi ở:
    Lào Cai
    Trường học/Cơ quan:
    Trường THCS Kim Tân

    làm sao để thoát ra vậy anh :(
     
  6. System32

    System32 Học sinh chăm học Thành viên

    Bài viết:
    288
    Điểm thành tích:
    76
    Nơi ở:
    Hà Nội
    Trường học/Cơ quan:
    THPT Marie Curie

    Thử gõ tổ hợp phím Ctrl + Alt + Del xem
    Rồi sau đó chọn Task Manager
    End cái Turbo Pascal đi.
     
  7. trà nguyễn hữu nghĩa

    trà nguyễn hữu nghĩa Cựu Phó Nhóm Vật Lí |Cây bút Thơ|Thần tượng VH Thành viên

    Bài viết:
    3,028
    Điểm thành tích:
    629
    Nơi ở:
    Phú Yên
    Trường học/Cơ quan:
    Trường THPT Lương Văn Chánh

    Ủa rõ ràng trong code mình có cài phím esc mà nhỉ??? Không ai bấm được hả ta
     
  8. trà nguyễn hữu nghĩa

    trà nguyễn hữu nghĩa Cựu Phó Nhóm Vật Lí |Cây bút Thơ|Thần tượng VH Thành viên

    Bài viết:
    3,028
    Điểm thành tích:
    629
    Nơi ở:
    Phú Yên
    Trường học/Cơ quan:
    Trường THPT Lương Văn Chánh

    Ủa rõ ràng trong code mình có cài phím esc mà nhỉ??? Không ai bấm được hả ta
     
  9. Chris Master Harry

    Chris Master Harry Học sinh gương mẫu Thành viên

    Bài viết:
    1,883
    Điểm thành tích:
    376
    Nơi ở:
    Lào Cai
    Trường học/Cơ quan:
    Trường THCS Kim Tân

    À được rồi em cảm ơn anh game hay lém luôn
     
  10. anoymous

    anoymous Học sinh mới Thành viên

    Bài viết:
    29
    Điểm thành tích:
    6
    Nơi ở:
    Hà Giang
    Trường học/Cơ quan:
    THCS LTT

    anh vào keymapper đi
     
Chú ý: Trả lời bài viết tuân thủ NỘI QUY. Xin cảm ơn!

Draft saved Draft deleted

CHIA SẺ TRANG NÀY

-->