avatar
전문가가 제공하는 출장마사지에 대하여 설명과 출장마사지의 종류와 장점에 대해서 자세한 정보를 안내합니다 MAGO1004에서 쉽

Guest 33 26th Feb, 2025

// LAB3.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#include <SDL2/SDL.h>
#ifdef _MSC_VER                 // tham số liên kết với
#   pragma comment (lib,    "sdl2main.lib")
#   pragma comment (lib,    "sdl2.lib")
#   pragma comment (linker, "/entry:\"mainCRTStartup\"" )
#   pragma comment (linker, "/subsystem:WINDOWS")
#endif

#define WWIDTH      320         // chiều rộng cửa sổ
#define WHEIGHT     240         // chiều cao cửa sổ
#define BLK_SIZE    16          // kích thước hình vuông

SDL_Window * wnd;               // con trỏ cửa sổ SDL
SDL_Renderer * rend;
									// con trỏ đối tượng dựn
int x = WWIDTH / 2, vx = 2;       // tọa độ và vận tốc di
int y = WHEIGHT / 2, vy = 2;      // ban đầu của hình vuôn
int a = WWIDTH / 2, va = 3;
int b = WHEIGHT / 2, vb = 5;
int c = WWIDTH / 2, vc = 100;
int d = WHEIGHT / 2, vd = 1;
void block(int x, int y)        // vẽ hình vuông 16x16 t
{                               // sử dụng màu trắng
	SDL_Rect r = { x, y, BLK_SIZE, BLK_SIZE };
	SDL_SetRenderDrawColor(rend, 255, 255, 255, 255);
	SDL_RenderFillRect(rend, &r);
}
void block2(int a, int b)
{
	SDL_Rect A = { a, b, BLK_SIZE, BLK_SIZE };
	SDL_SetRenderDrawColor(rend, 100, 200, 250, 255);
	SDL_RenderFillRect(rend, &A);
}
void block3(int c, int d)
{
	SDL_Rect B = { c,d,BLK_SIZE,BLK_SIZE };
	SDL_SetRenderDrawColor(rend, 201, 201, 201, 201);
	SDL_RenderFillRect(rend, &B);
}
void init(int vsync)            // khởi tạo môi trường đồ họa SDL
{                               // vsync = 1 nếu muốn sử dụng V-Sync
	SDL_Init(SDL_INIT_VIDEO);   // khởi tạo hệ thống đồ họa

								// tạo cửa sổ tại vị trí (100, 100), kích thước 640x480.
	wnd = SDL_CreateWindow("FPS", 100, 100, WWIDTH, WHEIGHT, SDL_WINDOW_SHOWN);
	// tạo đối tượng dựng hình 2D, kiểm tra việc kích hoạt V-Sync
	rend = SDL_CreateRenderer(wnd, -1,
		SDL_RENDERER_ACCELERATED |
		(vsync ? SDL_RENDERER_PRESENTVSYNC : 0));
}

int event()                     // xử lý sự kiện
{
	SDL_Event e;                // biến lưu trữ sự kiện
	int running = 1;            // biến kiểm soát vòng lặp
	while (SDL_PollEvent(&e) != 0) // lấy 1 sự kiện khỏi hàng đợi, nếu có
	{
		// nếu là phím nhấn, kiểm tra có phải ESC được nhấn hay không
		if (e.type == SDL_KEYDOWN)
			if (e.key.keysym.sym == SDLK_ESCAPE)
				running = 0;    // nếu đúng, ta yêu cầu đóng chương trình
								// nếu là sự kiện đóng cửa sổ (nhấn vào nút [X])
		if (e.type == SDL_QUIT)
			running = 0;        // ta cũng yêu cầu đóng chương trình
	}
	return running;
}
void update()
{
    x += vx; y += vy;           // di chuyển hình vuông
	a += va; b += vb;
	c += vc; d += vd;
    // nảy ngược lại nếu chạm các cạnh cửa sổ
    if (x < 0 || x > WWIDTH-BLK_SIZE)   vx = -vx;
    if (y < 0 || y > WHEIGHT-BLK_SIZE)  vy = -vy;
	if (a < 0 || a > WWIDTH-BLK_SIZE) va = -va;
	if (b < 0 || b > WHEIGHT-BLK_SIZE) vb = -vb;
	if (c < 0 || c > WWIDTH-BLK_SIZE) vc = -vc;
	if (d < 0 || d > WHEIGHT-BLK_SIZE) vd = -vd;
}

void draw()                     // xử lý các thao tác dựng hình
{
    // xóa toàn bộ framebuffer về màu đen
    SDL_SetRenderDrawColor(rend, 0, 0, 0, 0);
    SDL_RenderClear(rend);
    block(x, y);                // vẽ hình vuông tại vị trí hiện hành
	block2(a, b);
	block3(c, d);
    SDL_RenderPresent(rend);    // copy framebuffer -> screen
}

void done()                     // dọn dẹp ứng dụng
{
    SDL_DestroyRenderer(rend);  // hủy đối tượng ngữ cảnh dựng hình
    SDL_DestroyWindow(wnd);     // hủy cửa sổ SDL
    SDL_Quit();                 // chấm dứt phiên làm việc SDL
}

int main(int argc, char ** argv)
{
    int timerBegin, frameCount; // bộ đếm FPS
    float fps;                  // giá trị frame-per-second
    int running = 1;            // biến kiểm soát vòng lặp
    char buf[64];               // buffer tạm để hiển thị nội dung FPS

    init(1);                    // khởi tạo ứng dụng với VSync bật
    frameCount = 0;             // bắt đầu đếm số frame đã dựng
    timerBegin = SDL_GetTicks();// lấy thời gian bắt đầu vòng lặp
    while (running)
    {
        running = event();      // xử lý sự kiện trên cửa sổ
        update();               // cập nhật trạng thái ứng dụng
        draw();                 // dựng hình

        frameCount++;           // đã dựng xong 1 frame

        // tính số FPS
        fps = frameCount / ((SDL_GetTicks() - timerBegin)/1000.0f);

        // và hiển thị lên tiêu đề cửa sổ
        sprintf_s(buf, "FPS=%0.2f", fps);
		SDL_SetWindowTitle(wnd, buf);
    }
    done();                     // kết thúc ứng dụng
    return 0;
}
Markup
Description

No description

To share this paste please copy this url and send to your friends
RAW Paste Data