01/10/2018, 00:43

Khắc phục Con trỏ nhảy lung tung và rõ ràng trên màn hình console

mình có 1 game console , nhưng ko hiểu sao game đó chạy trên máy mình thì con trỏ giật qua giật lại rất rõ ràng, mình đã test trên máy khác, kết quả là có người ko bị giật, có người bị giống mình, máy mình thì ko đến mức yếu(bạn mình máy yếu hơn nhưng lại ko giật), mọi người chỉ mình cách khắc phục, google tìm quoài ko ra nên mình mới lên đây hỏi

Tao Không Ngu. viết 02:46 ngày 01/10/2018

Lam game do hoa di ban.!

Tống Hoàng Vũ viết 02:53 ngày 01/10/2018

Nếu game console của bạn có sử dụng chuột thì nên delay nó đi, khoảng 1/1000 giây refresh một lần

Nguyễn Minh Hiếu viết 02:49 ngày 01/10/2018

mình muốn nắm vững console mới chuyển sang đồ họa

Nguyễn Minh Hiếu viết 02:51 ngày 01/10/2018

delay làm sao chứ bạn e

Tao Không Ngu. viết 02:48 ngày 01/10/2018

Cá nhân mình thấy đó là một quan niệm sai lầm.
1 Bạn nắm vững sonole làm gì ? Nó là cái gì ? Nếu là mấy thao tác đọc ghi gotoxy v.v.v… Thì không khác gì bạn dùng dao rọc giay để mổ lợn.

Nguyễn Minh Hiếu viết 02:49 ngày 01/10/2018

Đó chỉ là quan điểm cá nhân của bạn thôi, quan điểm cảu mình khác bạn, thực ra làm đồ họa mình thấy ko khác lắm so với console, có chăng là được hỗ trợ nhiều về đồ họa, nó làm cho dễ hơn cả console ấy chứ, cái mình quan trọng là cách xây dựng game, chuyển động hay những thứ đại khái vậy, cái này cho dù làm đồ họa cũng phải đụng tới

Tống Hoàng Vũ viết 02:54 ngày 01/10/2018

Bạn code bằng Pascal sao.
Nếu bạn dùng Free Pascal có thể thêm thư viện gameunit, chỉ cần gọi hàm cursoroff trong đó là con trỏ sẽ ẩn

Nguyễn Minh Hiếu viết 02:43 ngày 01/10/2018

mình code bằng C++ bạn ơi

Tao Không Ngu. viết 02:56 ngày 01/10/2018

Game là một nganh công nghiệp. Cũng như các ngành công nghiệp khác các vấn đề cơ bản đều được nghiên cưú và viết thành sách như vòng lặp game, các pha, chuyển pha, (state) các mô hình phát hiện va chạm, mô hình chuyển động,giuxw khung hình ổn bất đồng bộ v.v.v… đều được nghiên cứu.
VD Vòng lặp game : UpdateEvent -> UpdateLogic -> UpdateView -> FixFPS.
http://gameprogrammingpatterns.com/game-loop.html
http://gamedevgeek.com/tutorials/managing-game-states-in-c/
http://www.ibm.com/developerworks/vn/library/opensource/2013Q3/wa-html5-game8/

Mình khuyên bạn nếu tiếp tục muốn mất thời gian thì cứ tiếp tục và tự sướng với nhưng gì mình làm được.
Còn không thì tìm sách về đọc và sau đó làm 1 sản phẩm ra hồn.

Nguyễn Minh Hiếu viết 02:47 ngày 01/10/2018

thanks bạn nhé, à mình khuyên bạn thêm là sau trả lời ai đó nên trả lời đúng trọng tâm, chớ lan man lạc đề, đừng nghĩ những cái bạn biết người ta cũng ko biết…

Tao Không Ngu. viết 02:52 ngày 01/10/2018

Sory ban. Tuy nhiên bạn có thể đẩy src code lên được không ? Vì thực tế nếu chỉ nói biểu hiện như thế thì rất khó có thể xác định được nguyên nhân cụ thể được, @_@!

Tynk Huynk viết 02:44 ngày 01/10/2018

lol, giờ nói mà không có minh họa thì khó mà giúp bạn được

Nguyễn Minh Hiếu viết 02:59 ngày 01/10/2018
#include <iostream>
#include <Windows.h>
#include <ctime>
#include <conio.h>

using namespace std;
void resizeConsole(int width, int height)
{
	HWND console = GetConsoleWindow();
	RECT r;
	GetWindowRect(console, &r);
	MoveWindow(console, r.left, r.top, width, height, TRUE);
}


void textcolor(int x)
{
	HANDLE mau;
	mau = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(mau, x);
}


void gotoxy(int x, int y)
{
	HANDLE hConsoleOutput;
	COORD Cursor_an_Pos = { x - 1, y - 1 };
	hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(hConsoleOutput, Cursor_an_Pos);
}


void XoaManHinh()
{
	HANDLE hOut;
	COORD Position;
	hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	Position.X = 0;
	Position.Y = 0;
	SetConsoleCursorPosition(hOut, Position);
}

char map[300][300];

void veDuong_1(int y, int x)
{
	for (y = 0; y < 30; y++){
		for (x = 0; x < 50; x++){
			switch (x)
			{
			case 0:
			case 49:
				map[y][x] = '|';
				break;
			default:
				map[y][x] = ' ';
				break;
			}
			if (x == 25 && y % 2 == 0)
				map[y][x] = '|';
		}
	}	
}
void veDuong_2(int y, int x)
{
	for (y = 0; y < 30; y++){
		for (x = 0; x < 50; x++){
			switch (x)
			{
			case 0:
			case 49:
				map[y][x] = '|';
				break;
			default:
				map[y][x] = ' ';
				break;
			}
			if (x == 25 && y % 2 != 0)
				map[y][x] = '|';
		}
	}
}

void in(int y, int x)
{
	for (y = 0; y < 30 ; y++){
		for (x = 0; x < 50; x++){
			if (map[y][x] == 'o' || map[y][x] == '!' || map[y][x] == 'H' || map[y][x] == 'I') textcolor(14);
			if (map[y][x] == '|' && (x==0 || x==49)) textcolor(240);
			if (map[y][x] == 'X') textcolor(10);
			cout << map[y][x];
			textcolor(15);
		}
		cout << endl;
	}
	
}

void xePlayer(int y, int x)
{
		map[y][x] = 'H';
		map[y - 1][x] = '!';
		map[y + 1][x] = 'I';
		map[y - 1][x - 1] = 'o';
		map[y + 1][x - 1] = 'o';
		map[y - 1][x + 1] = 'o';
		map[y + 1][x + 1] = 'o';
}

void xeCom(int y, int x)
{
	map[y][x] = 'X';
	map[y - 1][x] = 'X';
	map[y + 1][x] = 'X';
	map[y - 1][x - 1] = 'X';
	map[y + 1][x - 1] = 'X';
	map[y - 1][x + 1] = 'X';
	map[y + 1][x + 1] = 'X';
}

void dieuKhien(int& y, int& x)
{
	if (x != 3) {
		if (GetAsyncKeyState(VK_LEFT)){
			map[y][x] = ' ';
			map[y - 1][x] = ' ';
			map[y + 1][x] = ' ';
			map[y - 1][x - 1] = ' ';
			map[y + 1][x - 1] = ' ';
			map[y - 1][x + 1] = ' ';
			map[y + 1][x + 1] = ' ';
			x--;
			xePlayer(y, x);
		}
	}

	if (x != 46) {
		if (GetAsyncKeyState(VK_RIGHT)){
			map[y][x] = ' ';
			map[y - 1][x] = ' ';
			map[y + 1][x] = ' ';
			map[y - 1][x - 1] = ' ';
			map[y + 1][x - 1] = ' ';
			map[y - 1][x + 1] = ' ';
			map[y + 1][x + 1] = ' ';
			x++;
			xePlayer(y, x);
		}
	}


	if (y != 1) {
		if (GetAsyncKeyState(VK_UP)){
			map[y][x] = ' ';
			map[y - 1][x] = ' ';
			map[y + 1][x] = ' ';
			map[y - 1][x - 1] = ' ';
			map[y + 1][x - 1] = ' ';
			map[y - 1][x + 1] = ' ';
			map[y + 1][x + 1] = ' ';
			y--;
			xePlayer(y, x);
		}
	}


	if (y != 28) {
		if (GetAsyncKeyState(VK_DOWN)){
			map[y][x] = ' ';
			map[y - 1][x] = ' ';
			map[y + 1][x] = ' ';
			map[y - 1][x - 1] = ' ';
			map[y + 1][x - 1] = ' ';
			map[y - 1][x + 1] = ' ';
			map[y + 1][x + 1] = ' ';
			y++;
			xePlayer(y, x);
		}
	}
}

void xeTuDong(int& y, int& x, int& time)
{
	// chuyen dong
	map[y][x] = ' ';
	map[y - 1][x] = ' ';
	map[y + 1][x] = ' ';
	map[y - 1][x - 1] = ' ';
	map[y + 1][x - 1] = ' ';
	map[y - 1][x + 1] = ' ';
	map[y + 1][x + 1] = ' ';
	y++;
	xeCom(y, x);
	// thoi gian bien mat va xuat hien cua cac xe
	if (y == time){
		y = 1;
		x = 3 + rand() % 44;
	}
}



bool tinhDiem(int yt)
{
	if (yt == 31)
		return true;
	else return false;
}


int main()
{
	int doKho = 2;
	int vongLap = 1;
	resizeConsole(800, 600);
	int a = 3; 
	int x = 25; int y = 28;
	int soLuong=1;
	int diem = 0;
	//cout << "nhap so luong ban muon choi:";
	//cin >> soLuong;
	//fflush(stdin);

	int xt[1000]; 
	int yt[1000];

	srand(time(0));
	for (int i = 1; i <= soLuong; i++){
		xt[i] = 3 + rand() % 44;
		yt[i] = 1;
	}
	textcolor(14);
	cout << "san pham duoc viet boi Minh Hieu" << endl << "game ne xe :v" << endl;
	cout << "bam phim di chuyen de choi" << endl << "phim khac de thoat" << endl;
	_getch();
	textcolor(12);
	gotoxy(51, 8);
	cout << "***************************************";
	gotoxy(51, 9);
	cout << "*                                     *";
	gotoxy(51, 10);
	cout << "*                                     *";
	gotoxy(51, 10);
	cout << "*                                     *";
	gotoxy(51, 11);
	cout << "*                                     *";
	gotoxy(51, 12);
	cout << "*                                     *";
	gotoxy(51, 13);
	cout << "*                                     *";
	gotoxy(51, 14);
	cout << "*                                     *";
	gotoxy(51, 15);
	cout << "*                                     *";
	gotoxy(51, 16);
	cout << "***************************************";

	if (GetAsyncKeyState(VK_LEFT) || GetAsyncKeyState(VK_RIGHT) || GetAsyncKeyState(VK_UP) || GetAsyncKeyState(VK_DOWN) ){
		while (true) {
			XoaManHinh();
			textcolor(14);
			gotoxy(60, 10);
			cout << "ban con " << a << " mang";
			gotoxy(60, 11);
			cout << "ban dang choi:" << soLuong << " xe";
			gotoxy(60, 15);
			cout << "ban co " << diem << " diem";
			gotoxy(60, 13);
			cout << "ESC de ket thuc";
			textcolor(7);
			gotoxy(1, 1);

			//thong so khi thua
			if (a <= 0){
				gotoxy(60, 10);
				cout << "ban con 0 mang" << endl;
				gotoxy(30, 12);
				textcolor(13);
				cout << "ban da thua!oc cho vl! bam ESC de ket thuc" << endl;
				gotoxy(30, 13);
				system("pause");
				if (GetAsyncKeyState(VK_ESCAPE)) {
					return 0;
				}
			}
			// ve duong xe
			if (vongLap % 2 == 0)
				veDuong_1(y, x);
			else
				veDuong_2(y, x);

			xePlayer(y, x);

			for (int i = 1; i <= soLuong; i++){
				xeCom(yt[i], xt[i]);
			}

			dieuKhien(y, x);	// dieu khien
			// tam dung

			in(y, x);	//in ra duong xe
			int times = 30;
			// xe chay tu dong
			
			for (int i = 1; i <= soLuong; i++){
				times = times + 5;
				xeTuDong(yt[i], xt[i], times);
			}

			
			if (GetAsyncKeyState(VK_ESCAPE)) {
				system("pause");
				if (GetAsyncKeyState(VK_ESCAPE))
					return 0;
			}
			// va cham mat diem 
			
			for (int i = 1; i <= soLuong; i++){
				if ((map[y - 1][x] == 'X') || (map[y - 1][x + 1] == 'X') || (map[y-1][x-1] == 'X') ||
					((map[y][x + 1] == 'X') || (map[y][x - 1] == 'X') || (map[y][x] == 'X') || (map[y + 1][x - 1] == 'X') || (map[y + 1][x + 1] == 'X') || 
					(map[y + 1][x - 1] == 'X') || (map[y + 1][x] == 'X'))
					){
					a = a - 1;
					yt[i] = 1;
				}
				if (tinhDiem(yt[i]) == true)
					diem = diem + 1;
			}
			Sleep(0);
			if (diem != 0 && diem % doKho == 0){
				soLuong++;
				yt[soLuong] = 1;
				xt[soLuong] = 3 + rand() % 44;
				doKho += 2;
			}

			vongLap++;
		}
	}
	else
		return 0;
}
Nguyễn Hoàng viết 02:46 ngày 01/10/2018

bạn này có vẻ hơi bảo thủ. quan điểm học lấy nền tảng của bạn hoàn toàn đúng, mọi thứ đều cần bắt đầu từ căn bản, nhưng phải biết chọn cái căn bản mà học. sau này bạn ra ngoài làm mới biết dc. 1 lời khuyên chân thành cho bạn là " đừng cố gắng hiểu hết những thứ người khác mất cả đời để xây dựng, tư tường tự mình xây dựng hết mọi thứ là ngu ngốc nhất, bản chất của tri thức là kế thừa và phát triển"

Nguyễn Minh Hiếu viết 02:46 ngày 01/10/2018

trên đây hình như ko cho tải tệp @@

Nguyễn Minh Hiếu viết 02:51 ngày 01/10/2018

thanks bạn cơ mà mình bảo lấy căn bản là vừa đủ theo mình thấy, đâu thể nhảy cái vù qua ngôn ngữ khác khi mà C++ còn chưa biết gì về OPP đúng ko, ai học lập trình cũng đều muốn làm đẹp làm theo cách dễ, mình cũng đâu ngoại lệ, chưa kể mình cần vững C++ vì mình đang phân vân một số hướng bắt buộc phải giỏi C++ , dù sao mình cũng vừa tiếp xúc lập trình thôi, chưa biết đâu là điểm mạnh của mình, mà một số engine cần kiến thức C++ nữa, chứ đùng 1 phát vào đồ họa thì chắc mình cũng lơ ngơ mất

Nguyễn Minh Hiếu viết 03:00 ngày 01/10/2018

mình cũng khuyên bạn chân thành nhé: nên nói đúng vấn đề cần nói, nói đúng trọng tâm chủ đề cần nói chớ lan man một cách vô định, rõ ràng mình đang hỏi cách sửa cái console, phần mềm của bạn mình viết hay mình viết đều bị nháy như vậy, và mình muốn khắc phục, chứ mình ko hề nhắc đến cái code của mình hay hướng học của mình, vậy mà vài người vào cmt như đúng rồi, nó ko liên quan gì đến chủ đề luôn ấy các bạn tính thể hiện cái gì à @@

Nguyễn Hoàng viết 02:49 ngày 01/10/2018

chẳng qua đi qua thấy mấy đứa trẻ con dc người khác chỉ cho tí là nhảy cớn lên rồi, không có sự khiêm tốn và chí học hỏi , còn lâu mới khá dc =]]

Nguyễn Minh Hiếu viết 02:58 ngày 01/10/2018

bạn nói chuyện liên quan đến chủ đề tôi nói không tôi thấy bạn mới là người thích thể hiện, thể hiện với một đứa newbie như tôi à… Tôi nhắc lại Tôi đang hỏi cách khắc phục, nó KHÔNG liên quan cái gì bạn đang nói, và bạn dạy tôi được cái gì, và tôi ko khiêm tốn cái gì, bạn làm như ai cũng suy nghĩ thiên cận như bạn, nếu bạn có Măt và NÃO làm ơn đọc topic và phân tích nó giùm trước khi cmt thể hiện vô tội vạ

Tao Không Ngu. viết 03:00 ngày 01/10/2018

Mình có sửa lại một chút code của bạn.
https://drive.google.com/open?id=0B27Eg-FgxpIjX256S3NadkFBUmc
Mình dùng VS 2015.

Bài liên quan
0