国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C#項(xiàng)目實(shí)戰(zhàn)】控制臺游戲勇士斗惡龍(1)——游戲初始設(shè)置以及開始界面

這篇具有很好參考價(jià)值的文章主要介紹了【C#項(xiàng)目實(shí)戰(zhàn)】控制臺游戲勇士斗惡龍(1)——游戲初始設(shè)置以及開始界面。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

【C#項(xiàng)目實(shí)戰(zhàn)】控制臺游戲勇士斗惡龍(1)——游戲初始設(shè)置以及開始界面,C#實(shí)戰(zhàn),c#,游戲,游戲程序,開發(fā)語言

君兮_的個(gè)人主頁

即使走的再遠(yuǎn),也勿忘啟程時(shí)的初心

C/C++ 游戲開發(fā)

Hello,米娜桑們,這里是君兮_,最近開始正式的步入學(xué)習(xí)游戲開發(fā)的正軌,想要通過寫博客的方式來分享自己學(xué)到的知識和經(jīng)驗(yàn),這就是開設(shè)本專欄的目的。希望這些獨(dú)立的C#小項(xiàng)目能對做游戲的你有所幫助,畢竟學(xué)會游戲開發(fā)的最好的上手方式就是自己做一款游戲?。?/font>

前言

  • 本專欄主要是分享一些純C#的項(xiàng)目開發(fā)流程,后面如有結(jié)合Unity開發(fā)的游戲會有專門的專欄,同時(shí)由于任何一個(gè)獨(dú)立的項(xiàng)目都是非常復(fù)雜的,哪怕是簡單的小項(xiàng)目做完整都至少需要4~500行代碼,因此本專欄的獨(dú)立項(xiàng)目多半會分不同的板塊來分批次講解,這樣一是能拆分板塊減小項(xiàng)目開發(fā)難度,二也能夠便于大家理解方便大家跟著博客自己上手設(shè)計(jì)。
  • 還在更新中的項(xiàng)目,會在更新之后把相關(guān)鏈接放在本博客的開頭,我也會在開設(shè)一個(gè)新項(xiàng)目時(shí)盡快更完方便大家查閱的??!
  • 同時(shí)在每個(gè)項(xiàng)目的開頭,都會把本項(xiàng)目的流程圖放在開頭,方便大家檢索,當(dāng)然,我更加希望,大家在學(xué)習(xí)一段時(shí)間后,能不看我的講解只看流程圖就能把這個(gè)項(xiàng)目給實(shí)現(xiàn)了,能做到這樣那么恭喜你真正入門了。

一.勇士救公主流程圖

【C#項(xiàng)目實(shí)戰(zhàn)】控制臺游戲勇士斗惡龍(1)——游戲初始設(shè)置以及開始界面,C#實(shí)戰(zhàn),c#,游戲,游戲程序,開發(fā)語言

二.項(xiàng)目實(shí)現(xiàn)

1.游戲流程

  • 該游戲的大體流程是玩家通過打敗惡龍來到公主身邊拯救公主。如果挑戰(zhàn)成功,救出公主,則游戲勝利,如果不幸被惡龍擊敗,則游戲結(jié)束。
  • 開始界面
    【C#項(xiàng)目實(shí)戰(zhàn)】控制臺游戲勇士斗惡龍(1)——游戲初始設(shè)置以及開始界面,C#實(shí)戰(zhàn),c#,游戲,游戲程序,開發(fā)語言
  • 游戲界面
    【C#項(xiàng)目實(shí)戰(zhàn)】控制臺游戲勇士斗惡龍(1)——游戲初始設(shè)置以及開始界面,C#實(shí)戰(zhàn),c#,游戲,游戲程序,開發(fā)語言
  • 營救公主
    【C#項(xiàng)目實(shí)戰(zhàn)】控制臺游戲勇士斗惡龍(1)——游戲初始設(shè)置以及開始界面,C#實(shí)戰(zhàn),c#,游戲,游戲程序,開發(fā)語言
  • 游戲結(jié)束界面
    【C#項(xiàng)目實(shí)戰(zhàn)】控制臺游戲勇士斗惡龍(1)——游戲初始設(shè)置以及開始界面,C#實(shí)戰(zhàn),c#,游戲,游戲程序,開發(fā)語言
  • 麻雀雖小,五臟俱全,游戲的制作正是要從這種簡單的項(xiàng)目一步一步來的,廢話不多說,開始我們的學(xué)習(xí)吧?。?/li>

2.項(xiàng)目解析

  • 該項(xiàng)目主要分為幾塊,場景設(shè)置,開始界面的設(shè)置和切換,游戲界面的地圖的設(shè)計(jì)及角色的初始化,玩家的移動(dòng)邏輯以及游戲的戰(zhàn)斗邏輯,救出公主的邏輯,勝利或者失敗后進(jìn)入的結(jié)束界面的設(shè)置。
  • 今天,我們主要來講初始的一些設(shè)置以及開始界面的布置。

3.初始的設(shè)置

  • 首先,我們需要先來完成一些基礎(chǔ)的設(shè)置。
  • 由于我們是一個(gè)控制臺窗口的小游戲,因此我們需要先設(shè)置一下控制臺窗口以及緩沖區(qū)的大小
  int w = 60;
  int h = 40;
  Console.SetWindowSize(w, h);//控制臺窗口大小
  Console.SetBufferSize(w, h);//緩沖區(qū)大小
  • 其實(shí)這兩個(gè)函數(shù)第一個(gè)傳入的參數(shù)為設(shè)置的寬度,第二個(gè)傳入的參數(shù)為設(shè)置的高度
    【C#項(xiàng)目實(shí)戰(zhàn)】控制臺游戲勇士斗惡龍(1)——游戲初始設(shè)置以及開始界面,C#實(shí)戰(zhàn),c#,游戲,游戲程序,開發(fā)語言
  • 此時(shí),在你的電腦上還有光標(biāo)閃爍,我們需要把光標(biāo)給隱去
//隱藏光標(biāo)
 Console.CursorVisible = false;//false為隱去,true為顯示
  • 好了,做了以上的基本設(shè)置,我們來進(jìn)行開始界面的設(shè)置

4.開始界面

  • 在開始之前,我們不妨想想,我們這個(gè)游戲有三個(gè)界面,我們要怎么實(shí)現(xiàn)不同界面的切換呢?
  • 在這里,我們可以考慮到用switch來進(jìn)行分組,用不同的條件來區(qū)別不同的界面,然后在不同的case下實(shí)現(xiàn)不同界面的不同功能。這樣在切換不同界面時(shí),我們只需改變條件讓程序進(jìn)入不同case即可。
int nowSceneID = 1;
//不同的場景進(jìn)行不同的邏輯處理
switch (nowSceneID)
{
	//開始界面
    case 1:
        break;
     //游戲界面
    case 2:
        break;
     //結(jié)束界面
    case 3:
        break;
    default:
        break;
}
  • 這樣,我們就能通過在代碼中改變nowScene的值來切換不同的場景了
  • 同時(shí),我們要注意,不能讓游戲主動(dòng)退出,而是通過玩家的輸入才能退出,因此我們不妨將以上的邏輯放入一個(gè)死循環(huán)中,這樣我們就能通過控制循環(huán)來控制游戲的退出了。

【C#項(xiàng)目實(shí)戰(zhàn)】控制臺游戲勇士斗惡龍(1)——游戲初始設(shè)置以及開始界面,C#實(shí)戰(zhàn),c#,游戲,游戲程序,開發(fā)語言

  • 下面我們就這case 1里實(shí)現(xiàn)我們開始界面的功能
  • 我們的開始界面,首先得有我們的游戲名稱吧
case 1:
  Console.Clear();//清屏
  Console.SetCursorPosition(w/2-5,10);//設(shè)置輸入坐標(biāo)
  Console.WriteLine("勇士斗惡龍");
  • 先介紹一下SetCursorPosition函數(shù)。我們的控制臺坐標(biāo)的坐標(biāo)軸(0,0)在左上角,因此增加傳入?yún)?shù)的大小輸入位置是往右往下的,關(guān)于坐標(biāo)的設(shè)置,相信聰明的你自己動(dòng)手試一下就能明白其中的原理
    【C#項(xiàng)目實(shí)戰(zhàn)】控制臺游戲勇士斗惡龍(1)——游戲初始設(shè)置以及開始界面,C#實(shí)戰(zhàn),c#,游戲,游戲程序,開發(fā)語言

  • 注意:如果你這里一直閃屏是由于你一直在循環(huán)清屏造成的,屬于正?,F(xiàn)象,不要慌,等下會解決的,我們繼續(xù)

  • 好了,接下來是開始界面中最復(fù)雜的一段,我們怎么實(shí)現(xiàn)按W鍵和S鍵點(diǎn)亮”開始游戲“或“結(jié)束游戲”,來提醒玩家目前的選項(xiàng)呢?
    【C#項(xiàng)目實(shí)戰(zhàn)】控制臺游戲勇士斗惡龍(1)——游戲初始設(shè)置以及開始界面,C#實(shí)戰(zhàn),c#,游戲,游戲程序,開發(fā)語言

  • 這里我們來分析一下,其實(shí)邏輯是非常簡單的,首先,當(dāng)剛進(jìn)入時(shí),我們讓程序進(jìn)入讓開始游戲亮,退出游戲不亮的場景,而玩家按下“S”,就切換到“退出游戲”亮上,再按下“W”就切回“開始游戲”亮的情況。

  • 哎,是不是和剛才的場景切換邏輯有億點(diǎn)點(diǎn)相像呢?沒錯(cuò),這是也可以通過while結(jié)合switch的方法實(shí)現(xiàn)??!

 //當(dāng)前選項(xiàng)的編號
 int nowSelIndex = 0;
 //因?yàn)橐斎?我們可以構(gòu)造一個(gè)開始界面的死循環(huán)
 //專門用來處理 開始場景相關(guān)的邏輯
 while (true)
 {
     
     //顯示內(nèi)容檢測輸入
     //設(shè)置光標(biāo)位置,再顯示內(nèi)容
     Console.SetCursorPosition(w / 2 - 4, 12);
     //根據(jù)當(dāng)前選擇的編號來決定是否變色
     Console.ForegroundColor = nowSelIndex == 0 ? ConsoleColor.Red : ConsoleColor.White;//三目操作符結(jié)合設(shè)置字體顏色的函數(shù)
     Console.Write("開始游戲");
     Console.SetCursorPosition(w / 2 - 4, 14);
     Console.ForegroundColor = nowSelIndex == 1 ? ConsoleColor.Red : ConsoleColor.White;
     Console.Write("退出游戲");
     //檢查玩家輸入的鍵并且不會在控制臺上顯示輸入內(nèi)容
     char input = Console.ReadKey(true).KeyChar;
     switch (input)
     {
         case 'W':
         case 'w':
             nowSelIndex = 0;

             break;
         case 'S':
         case 's':
             nowSelIndex = 1;

             break;
      
     }

    

 }
  • 很簡單的邏輯,通過 nowSelIndex的值進(jìn)行標(biāo)記,初始為0,如果按下“S”鍵就讓nowSelIndex = 1,此時(shí)開始游戲?yàn)榘?,退出游戲?yàn)榧t,想再切換為開始游戲?yàn)榧t退出游戲?yàn)榘拙桶聪隆盬“鍵即可。
  • 這里是你需要注意的地方:
  //檢查玩家輸入的鍵并且不會在控制臺上顯示輸入內(nèi)容
     char input = Console.ReadKey(true).KeyChar;
  • 當(dāng)ReadKey括號中的值為true時(shí),輸入的值就不會顯示在控制臺上了,同時(shí)我們由于每次進(jìn)入下一次循環(huán)中都會清屏也不會影響游戲的運(yùn)行。這樣就達(dá)到了我們的目的,我們來進(jìn)行下一步。
  • 同時(shí),我們實(shí)現(xiàn)“開始游戲”和“退出游戲”的標(biāo)記提醒后,該進(jìn)行選擇了,這里我們就通過來按“J”來進(jìn)行下一步,在“開始游戲”高亮?xí)r,按J切換到游戲場景,在退出游戲時(shí)高亮,按J就退出程序。
 case 'j':
 case 'J':
     if(nowSelIndex == 0)
     {
         //1.改變場景ID,進(jìn)入游戲場景
         nowSceneID = 2;
         //2.要退出內(nèi)層循環(huán)while
         isQuitWhile = true;
     }
     else
     {
         //關(guān)閉控制臺
         Environment.Exit(0);
     }
     break;
   if (isQuitWhile == true)
    break;
  • 這里我們定義了一個(gè)bool類型的isQuitWhile來實(shí)現(xiàn)切換場景的目的,由于我們這里的break都是switch都是里的,只能退出switch,因此需要通過這個(gè)bool類型的變量達(dá)到退出內(nèi)層循環(huán)進(jìn)入外層的switch里重新選擇的目的,而由于此時(shí)我們改變了 nowSceneID的值,自然就可以切換進(jìn)入游戲場景了。

5.該模塊源碼

  • 由于上面的講述是分步拆分的,下面為大家提供該部分的源碼來幫助大家理解該部分的內(nèi)容
namespace 勇士斗惡龍
{
    class Program
    {
        static void Main(string[] args)
        {
            int w = 60;
            int h = 40;
            Console.SetWindowSize(w, h);
            Console.SetBufferSize(w, h);
            //隱藏光標(biāo)
            Console.CursorVisible = false;
            int nowSceneID = 1;
            while (true)
            {
                //不同的場景進(jìn)行不同的邏輯處理

                switch (nowSceneID)
                {
                    case 1:
                        Console.Clear();
                       
                        Console.SetCursorPosition(w / 2 - 5, 10);
                        Console.WriteLine("勇士斗惡龍");
                        //當(dāng)前選項(xiàng)的編號
                        int nowSelIndex = 0;
                        //因?yàn)橐斎?我們可以構(gòu)造一個(gè)開始界面的死循環(huán)
                        //專門用來處理 開始場景相關(guān)的邏輯
                        while (true)
                        {
                            //用一個(gè)標(biāo)識用來退出此循環(huán)
                            bool isQuitWhile = false;
                            //顯示內(nèi)容檢測輸入
                            //設(shè)置光標(biāo)位置,再顯示內(nèi)容
                            Console.SetCursorPosition(w / 2 - 4, 12);
                            //根據(jù)當(dāng)前選擇的編號來決定是否變色
                            Console.ForegroundColor = nowSelIndex == 0 ? ConsoleColor.Red : ConsoleColor.White;
                            Console.Write("開始游戲");
                            Console.SetCursorPosition(w / 2 - 4, 14);
                            Console.ForegroundColor = nowSelIndex == 1 ? ConsoleColor.Red : ConsoleColor.White;
                            Console.Write("退出游戲");
                            //檢查玩家輸入的鍵并且不會在控制臺上顯示輸入內(nèi)容
                            char input = Console.ReadKey(true).KeyChar;
                            switch (input)
                            {
                                case 'W':
                                case 'w':
                                    nowSelIndex = 0;

                                    break;
                                case 'S':
                                case 's':
                                    nowSelIndex = 1;

                                    break;
                                case 'j':
                                case 'J':
                                    if (nowSelIndex == 0)
                                    {
                                        //1.改變場景ID
                                        nowSceneID = 2;
                                        //2.要退出內(nèi)層循環(huán)while
                                        isQuitWhile = true;
                                    }
                                    else
                                    {
                                        //關(guān)閉控制臺
                                        Environment.Exit(0);
                                    }
                                    break;
                            }

                            if (isQuitWhile == true)
                                break;

                        }
                        
                        break;
                    case 2:
                        break;
                    case 3:
                        break;
                    default:
                        break;
                }
            }
        }
    }
}


總結(jié)

  • 今天的內(nèi)容到這里就結(jié)束了,總的來說這部分的內(nèi)容還是比較簡單的,不妨跟著博主自己動(dòng)手嘗試一下,畢竟很多問題只有自己動(dòng)手試過了才能發(fā)現(xiàn),如果你在實(shí)現(xiàn)過程中遇到任何問題,歡迎在評論區(qū)指出或者私信我??!
  • 后面的內(nèi)容很快更新,感興趣不妨關(guān)注一下錯(cuò)過后面的內(nèi)容哦??!(小小預(yù)告一下,接下來就開始我們游戲界面的內(nèi)容啦,這一塊才是真正的重頭戲)

新人博主創(chuàng)作不易,如果感覺文章內(nèi)容對你有所幫助的話不妨三連一下再走唄。你們的支持就是我更新的動(dòng)力?。?!

**(可莉請求你們?nèi)B支持一下博主?。?!點(diǎn)擊下方評論點(diǎn)贊收藏幫幫可莉吧)**

【C#項(xiàng)目實(shí)戰(zhàn)】控制臺游戲勇士斗惡龍(1)——游戲初始設(shè)置以及開始界面,C#實(shí)戰(zhàn),c#,游戲,游戲程序,開發(fā)語言文章來源地址http://www.zghlxwxcb.cn/news/detail-705168.html

到了這里,關(guān)于【C#項(xiàng)目實(shí)戰(zhàn)】控制臺游戲勇士斗惡龍(1)——游戲初始設(shè)置以及開始界面的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C++控制臺實(shí)現(xiàn)簡化版吃雞游戲

    直接上代碼 這個(gè)游戲是一個(gè)簡化版的吃雞游戲。你需要通過鍵盤輸入W、A、S、D來移動(dòng)玩家位置,并擊敗敵人來獲得積分。當(dāng)你累計(jì)得分達(dá)到5分時(shí),游戲結(jié)束,你將獲得勝利。地圖中的P表示玩家位置,E表示敵人位置,.表示空白位置。每次擊敗敵人后,將會生成一個(gè)新的敵人

    2024年02月16日
    瀏覽(20)
  • c++控制臺雙人格斗小游戲(測試版)

    嗨嗨嗨,又是我! 我又來發(fā)博客啦! 最近太閑了,又做了個(gè)small游戲:小人-格斗(測試版) 記得加上gamesio.h哦

    2024年02月12日
    瀏覽(20)
  • C#控制臺應(yīng)用程序如何添加窗口關(guān)閉事件?

    C#控制臺應(yīng)用程序如何添加窗口關(guān)閉事件?

    公司有一個(gè)控制臺應(yīng)用程序,在關(guān)閉控制臺應(yīng)用程序窗口前,想處理一下業(yè)務(wù)邏輯。還有比如誤操作關(guān)閉了,或者像消息隊(duì)列啟動(dòng)了發(fā)送消息提醒,那關(guān)閉了窗口代表控制臺應(yīng)用銷毀了,也需要發(fā)送消息通知。那這個(gè)時(shí)候添加關(guān)閉窗口事件就派上用場了。 很多小伙伴問,有沒

    2024年02月13日
    瀏覽(27)
  • 超好玩C++控制臺打飛機(jī)小游戲,附源碼

    超好玩C++控制臺打飛機(jī)小游戲,附源碼

    我終于決定還是把這個(gè)放出來。 視頻在這:https://v.youku.com/v_show/id_XNDQxMTQwNDA3Mg==.html 具體信息主界面上都有寫。 按空格暫停,建議暫停后再升級屬性。 記錄最高分的文件進(jìn)行了加密。 有boss(上面視頻2分47秒)。 挺好玩的。 可能有bug,不想改了,整體體驗(yàn)不錯(cuò)就行了。 更多

    2024年02月05日
    瀏覽(20)
  • OpenKruiseGame × KubeSphere 聯(lián)合發(fā)布游戲服運(yùn)維控制臺,推動(dòng)云原生游戲落地

    OpenKruiseGame × KubeSphere 聯(lián)合發(fā)布游戲服運(yùn)維控制臺,推動(dòng)云原生游戲落地

    作者:云原生游戲社區(qū) 近日,云原生游戲開源社區(qū)旗下 OpenKruiseGame(以下簡稱:OKG)基于 KubeSphere 4.0 LuBan 架構(gòu)開發(fā)的游戲服運(yùn)維控制臺 OKG Dashboard 正式發(fā)布!現(xiàn)已上架 KubeSphere Marketplace 云原生應(yīng)用擴(kuò)展市場,支持免費(fèi)使用。 OpenKruiseGame(OKG) 是 CloudNativeGame 社區(qū)聯(lián)合阿里云

    2024年01月24日
    瀏覽(32)
  • 淺析 C# 控制臺的 Ctrl+C 是怎么玩的

    淺析 C# 控制臺的 Ctrl+C 是怎么玩的

    上一篇我們聊到了 Console 為什么會卡死,讀過那篇文章的朋友相信對 conhost.exe 有了一個(gè)大概的了解,這一篇更進(jìn)一步聊一聊窗口的特殊事件 Ctrl+C 底層流轉(zhuǎn)到底是什么樣的,為了方便講述,讓 chagtgpt 給我生成一段Ctrl+C 的業(yè)務(wù)代碼。 然后簡單跑一下,確認(rèn)代碼沒毛病。 相信很

    2024年02月08日
    瀏覽(20)
  • 淺析 C# Console 控制臺為什么也會卡死

    淺析 C# Console 控制臺為什么也會卡死

    在分析旅程中,總會有幾例控制臺的意外卡死導(dǎo)致的生產(chǎn)事故,有經(jīng)驗(yàn)的朋友都知道,控制臺卡死一般是動(dòng)了 快速編輯窗口 的緣故,截圖如下: 雖然知道緣由,但一直沒有時(shí)間探究底層原理,市面上也沒有對這塊的底層原理介紹,昨天花了點(diǎn)時(shí)間簡單探究了下,算是記錄分

    2024年02月08日
    瀏覽(85)
  • VS2022 和 VS2010 C#控制臺輸出 Hello World

    VS2022 和 VS2010 C#控制臺輸出 Hello World

    最后,一定將【 ? 】將解決方案和項(xiàng)目放在同一個(gè)目錄中(D)的對勾點(diǎn)上,如上圖。這個(gè)小習(xí)慣,對于以后程序的維護(hù)有好處。 Console.WriteLine(\\\"Hello World\\\"); ? 代碼輸入完成以后,可以通過以下3種方法來運(yùn)行。 1 、在菜單欄上選擇 “ 調(diào)試 ”-“ 開始執(zhí)行(不調(diào)試) ” 命令。

    2024年02月06日
    瀏覽(24)
  • C#控制臺連接Mysql數(shù)據(jù)庫,有配置數(shù)據(jù)庫連接字符串的配置文件

    實(shí)現(xiàn)功能 讀取. .txt 中的配置文件,來初始化連接字符串 讓連接字符串的配置文件不存在會主動(dòng)創(chuàng)建默認(rèn)的連接字符串 注意點(diǎn): 需要引用Newtonsoft 使用mysql

    2024年02月10日
    瀏覽(26)
  • Jenkins執(zhí)行流水線項(xiàng)目,控制臺輸出中文是亂碼

    Jenkins執(zhí)行流水線項(xiàng)目,控制臺輸出中文是亂碼

    測試環(huán)境: ????????操作系統(tǒng):Windows 10 ????????Jenkins版本:Jenkins 2.375.1 問題現(xiàn)象: 搭建Jenkins的流水線項(xiàng)目,在Jenkinsfile腳本中想打印中文,運(yùn)行pipeline后,在Jenkins的Console Output出現(xiàn)亂碼 問題原因: 出現(xiàn)Jenkins控制臺打印中文亂碼問題,通常是由于編碼設(shè)置不正確導(dǎo)致

    2024年02月06日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包