How to ez : ทำอนิเมชั่น loading ง่ายๆ ด้วย printf

Edittion_02

สวัสดีครับ วันนี้ก็จะมานำเสนอ หนึ่งในวิธีการใช้ printf ในการสร้าง อนิเมชั่น แสดงหลอด loading ข้อมูล กันครับ

โดยวิธีที่เราจะใช้ คือ \r ที่อยู่ในตัวฟังก์ชั่น printf เอง

ซึ่งเป็นการทำให้ คอลโซน พร้อมที่จะเขียนทับข้อความก่อนหน้านั้น

เช่น

 

printf(“Hello World!”);

printf(“\r”);

 

รูปที่ 1

———

AS1pic_1

———-

 

เพิ่มคำสั่ง printf(“What is his name?”); ต่อจาก รูปที่ 1

จะสังเกตเห็นว่า หากพิมพ์ตัวอักษรต่อไป จะทับ Hello World!

 

รูปที่ 2

———-

AS1pic_2

———-

จากคำสั่งด้านบน เราจะทำเป็น loop เขียนซ้ำที่เดิม เพื่อทำเป็น อนิเมชั่นโหลด

 

void loader() {
    int i;
    char str[] = "                                        ";  //40 ตัวอักษร
    for(i = 0 ; i <= 40 ; i++) {
        printf("\r[%s]", str);
        str[i] = '|';
        Sleep(100);
    }
}

 

โดยที่ srt[] เป็นข้อความ ที่มี ช่องว่าง 40 ตัว และ ทำการวน 40 รอบ

โดยทุกรอบที่วน จะเขียนซ้ำที่เดิม เปลี่ยน ช่องว่าง เป็นตัว | ที่ล่ะตัวจนครบ 40 ตัว

และแต่ล่ะครั้งที่วน จะรอ 0.1 วินาที โดย Sleep(เวลา(ms)) เพื่อไม่ให้ทำงานเร็วเกินไป(คนอาจจะมองไม่ทัน)

สั่งรัน
loader();

รูปที่ 3

——–

AS1pic_03

———

จากนั้น หากเราพัฒนาต่อไป

โดยให้ฟังชันสามารถรับ  char Array แล้วตรวจความยาวของ Array

แล้ววนตามความยาว Array ที่ใส่ และเปลี่ยน str แต่ละตัวให้กลายเป็น Array ที่รับ แล้วพิมพ์ใหม่

แต่ความยาว Array  ต้องไม่เกิน str (40 ตัว แต่เปลี่ยนแปลงได้)

รูปที่ 4

———

AS1pic_3

———

โค้ดครับๆ

#include <stdio.h>
#include “stdafx.h”
#include <iostream>
#include <windows.h>

void loader(char instr[]) {
int i;
int l = strlen(instr);
char str[] = ” “; //insrt[] size can’t be more than srt[]
if ( l <= strlen(str) ) {
for(i = 0 ; i <= l ; i++) {
printf(“\r%s”, str);
str[i] = instr[i];
Sleep(20);
}
}
}
int main()
{
char Name[] = (“Name : Donlawit Beesomboon\n”);
char Nickname[] = (“NickName : Palm\n”);
char Age[] = (“Age : 20\n”);
char Hobby[] = (“Hobby : Play game all day!\n”);
char Heart1[] = (“\t /\\/\\ \t /\\/\\ \t /\\/\\ \t /\\/\\ \n”);
char Heart2[] = (“\t \\ / \t \\ / \t \\ / \t \\ / \n”);
char Heart3[] = (“\t \\/ \t \\/ \t \\/ \t \\/ \n”);

loader(Name);
loader(Nickname);
loader(Age);
loader(Hobby);

loader(Heart1);
loader(Heart2);
loader(Heart3);

printf(“\n”);
system(“pause”);
return 0;
}

Donlawit Beesomboon
at GlurGeek.Com

Leave a Reply

Copyright © 2021 GlurGeek.Com. All Rights Reserved.