Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 28 kết quả

Đề tài: Lập trình C | Cách tạo 1 bầu trời đầy sao

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

    Mặc định Lập trình C | Cách tạo 1 bầu trời đầy sao

    Em sưu tầm được code tạo bầu trời đầy sao này cũng hay hay . Các bạn nào đang cần thì tham khảo nhé . Em có chú thích 1 chút về code . Nếu có gì ko hiểu thì cứ bàn luận , hỏi han nhe . ^^
    C Code:
    1. /* Star */
    2. #include <stdio.h>
    3. #include <dos.h>
    4. #include <stdlib.h>
    5.  
    6. #define VIDEO_INT 0x10
    7. #define MAX 100
    8.  
    9. typedef unsigned char BYTE;
    10. BYTE far *video = (BYTE far*)MK_FP(0xA000, 0); //gan dia chi thuc cua man hinh cho con tro video .
    11. struct tagstar {                               //ta can khai bao con tro far do ta can tro den vung nho cua man    
    12.   int status;                                   //hinh ( da thay doi dia chi segment )  .
    13.   int row, col;                                 //dia chi man hinh o mode 0x13 co dia chi segment la A000:0
    14.   int tanggiam;
    15.   int color;
    16. } STAR[MAX]; //khai bao 1 mang STAR
    17.  
    18. void setmode(int mode) //ham setmode cho man hinh . su dung cu phap assembly , o day ta su dung ngat 0x10
    19. {                       //la ngat quan ly man hinh may tinh
    20.   asm {
    21.     mov ax, mode  
    22.     int VIDEO_INT
    23.   }
    24. }
    25.  
    26. void setpixel(int row, int col, BYTE color) //ham nay dung de to mau pixel tai vi tri row , col
    27. {
    28.    video[row*320+col] = color;
    29. }
    30.  
    31. void draw(struct tagstar s, BYTE color) //ham nay dung de ve mot ngoi sao
    32. {
    33.   int i, j;
    34.   switch (s.status) //mot ngoi sao co the co 7 trang thai hien hinh , ta can lua chon
    35.   {
    36.     case 0 : for (i=-3; i<=3; i++)
    37.              {
    38.                setpixel(s.row + i, s.col + i, color);
    39.                setpixel(s.row + i, s.col - i, color);
    40.                setpixel(s.row, s.col + i, color);
    41.                setpixel(s.row + i, s.col, color);
    42.              }
    43.              break;
    44.     case 1 : for (i=-2; i<=2; i++)
    45.              {
    46.                setpixel(s.row + i, s.col + i, color);
    47.                setpixel(s.row + i, s.col - i, color);
    48.                setpixel(s.row, s.col + i, color);
    49.                setpixel(s.row + i, s.col, color);
    50.              }
    51.              break;
    52.     case 2 : for (i=-2; i<=2; i++)
    53.              {
    54.                setpixel(s.row, s.col + i, color);
    55.                setpixel(s.row + i, s.col, color);
    56.              }
    57.              for (i=-1; i<=1; i++)
    58.              {  setpixel(s.row + i, s.col + i, color);
    59.                setpixel(s.row + i, s.col - i, color);
    60.              }
    61.     case 3 : for (i=-2; i<=2; i++)
    62.              {
    63.                setpixel(s.row, s.col + i, color);
    64.                setpixel(s.row + i, s.col, color);
    65.              }
    66.     case 4 : for (i=-1; i<=1; i++)
    67.              {
    68.                setpixel(s.row, s.col + i, color);
    69.                setpixel(s.row + i, s.col, color);
    70.              }
    71.              break;
    72.     case 5 : setpixel(s.row, s.col, color);
    73.              break;
    74.     case 6 : setpixel(s.row, s.col, 8);
    75.              break;
    76.     case 7 : setpixel(s.row, s.col, 7);
    77.              break;
    78.   }
    79. }
    80.  
    81. void star() //ham nay dung de ve 1 bau troi day sao
    82. {
    83.   int i;
    84.   do {
    85.     for (i=0; i<MAX; i++)
    86.       draw(STAR[i], STAR[i].color);
    87.     delay(100);
    88.     for (i=0; i<MAX; i++)
    89.     {
    90.       draw(STAR[i], 0);
    91.       if (STAR[i].tanggiam)
    92.       {
    93.         if (STAR[i].status < 7)
    94.           STAR[i].status++;
    95.         else
    96.           STAR[i].tanggiam = 0;
    97.       }
    98.       else
    99.       {
    100.         if (STAR[i].status > 0)
    101.           STAR[i].status--;
    102.         else
    103.           STAR[i].tanggiam = 1;
    104.       }
    105.     }
    106.   } while (!kbhit());
    107. }
    108.  
    109. void main()
    110. {
    111.   int i;
    112.   randomize();
    113.   for (i=0; i<MAX; i++)
    114.   {
    115.     STAR[i].status = random(8);
    116.     STAR[i].row    = random(200);
    117.     STAR[i].col    = random(320);
    118.     STAR[i].tanggiam = random(2);
    119.     STAR[i].color = random(255)+1;
    120.   }
    121.   setmode(0x13);
    122.   star();
    123.   getch();
    124.   setmode(3); //tro ve man hinh van ban
    125. }

  2. #2
    Ngày gia nhập
    06 2007
    Nơi ở
    một nơi xa xăm...
    Bài viết
    127

    Trông rất lung linh.Tuy nhiên để có thể chạy tốt thì cần thêm
    Code:
    #include <conio.h> //vì sử dụng hàm kbhit()
    sieuphuong cố gắng phát huy nhé ^^

  3. #3
    Ngày gia nhập
    03 2008
    Nơi ở
    TP Cần Thơ
    Bài viết
    5

    thêm lệnh #include<conio.h> thì nó báo lỗi chổ randomize(); là sao vậy bạn

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

    sao em chay tren borland C++ 5.02 nó hok chạy nhỉ.Em thêm #include <conio.h> mà nó cứ báo lỗi ở //video[row*320+col] = color;

  5. #5
    Ngày gia nhập
    11 2007
    Bài viết
    153

    Lỗi gì mới được chứ . Thêm vào các thư viện hỗ trợ cho randomize() coi nào ... ???
    ttecak ?

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

    Mặc định Lập trình C | Cách tạo 1 bầu trời đầy sao

    Mình chạy Borland C 5.02 lại xuất hiện lỗi sau:

    Info :Compiling C:\PROGRAM FILES\BC5\BIN\noname00.cpp
    Error: noname00.cpp(11,11)eclaration syntax error
    Error: noname00.cpp(29,10):Undefined symbol 'video'
    Warn : noname00.cpp(30,2):Parameter 'row' is never used
    Warn : noname00.cpp(30,2):Parameter 'col' is never used
    Warn : noname00.cpp(30,2):Parameter 'color' is never used
    Warn : noname00.cpp(80,2):'j' is declared but never used
    Warn : noname00.cpp(87,35):Conversion may lose significant digits
    Error: noname00.cpp(88,11):Call to undefined function 'delay'
    Error: noname00.cpp(107,19):Call to undefined function 'kbhit'
    Error: noname00.cpp(124,9):Call to undefined function 'getch'


    Vậy lỗi là vì sao mà nó không thể chạy?
    Tiện cho mình hỏi luôn lỗi sau:
    Info :dongho.c: out of date with destination dongho.obj
    Info : dongho.c: source date 3:23:08 AM 5/13/1999 destination date <unknown>
    Info :Compiling E:\Bai tap\GRAPHICS-C\dongho.c
    Error: GRAPHICS.H(20,52):Error directive: BGI graphics not supported under Windows
    Đã được chỉnh sửa lần cuối bởi thienthan_c : 19-03-2008 lúc 04:04 PM.

  7. #7
    Ngày gia nhập
    12 2007
    Bài viết
    224

    Nói chung là bạn có chỉnh lại đường dẫn cho têp tin BGI chưa há ... ^^

  8. #8
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    tớ tét bằng BC3.1 DOS của tớ ko chạy được
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

  9. #9
    Ngày gia nhập
    11 2007
    Bài viết
    153

    em test ngon mà , lỗi gì thế các bác ...???
    ttecak ?

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

    Thank you!.... "chỉnh lại đường dẫn cho têp tin BGI"- nghĩa là làm gì nữa đây. Mong bạn chỉ giúp cụ thể hơn.

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