<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Feeling

        三人行,必有我師焉

       ::  :: 新隨筆 :: 聯系 ::  :: 管理 ::
      185 隨筆 :: 0 文章 :: 392 評論 :: 0 Trackbacks

    #

    1 快速排序(QuickSort)

    快速排序是一個就地排序,分而治之,大規模遞歸的算法。從本質上來說,它是歸并排序的就地版本。快速排序可以由下面四步組成。

    (1) 如果不多于1個數據,直接返回。
    (2) 一般選擇序列最左邊的值作為支點數據。
    (3) 將序列分成2部分,一部分都大于支點數據,另外一部分都小于支點數據。
    (4) 對兩邊利用遞歸排序數列。

    快速排序比大部分排序算法都要快。盡管我們可以在某些特殊的情況下寫出比快速排序快的算法,但是就通常情況而言,沒有比它更快的了。快速排序是遞歸的,對于內存非常有限的機器來說,它不是一個好的選擇。 

    2 歸并排序(MergeSort)

    歸并排序先分解要排序的序列,從1分成2,2分成4,依次分解,當分解到只有1個一組的時候,就可以排序這些分組,然后依次合并回原來的序列中,這樣就可以排序所有數據。合并排序比堆排序稍微快一點,但是需要比堆排序多一倍的內存空間,因為它需要一個額外的數組。

    3 堆排序(HeapSort)

    堆排序適合于數據量非常大的場合(百萬數據)。

    堆排序不需要大量的遞歸或者多維的暫存數組。這對于數據量非常巨大的序列是合適的。比如超過數百萬條記錄,因為快速排序,歸并排序都使用遞歸來設計算法,在數據量非常大的時候,可能會發生堆棧溢出錯誤。

    堆排序會將所有的數據建成一個堆,最大的數據在堆頂,然后將堆頂數據和序列的最后一個數據交換。接下來再次重建堆,交換數據,依次下去,就可以排序所有的數據。

    4 Shell排序(ShellSort)

    Shell排序通過將數據分成不同的組,先對每一組進行排序,然后再對所有的元素進行一次插入排序,以減少數據交換和移動的次數。平均效率是O(nlogn)。其中分組的合理性會對算法產生重要的影響。現在多用D.E.Knuth的分組方法。

    Shell排序比冒泡排序快5倍,比插入排序大致快2倍。Shell排序比起QuickSort,MergeSort,HeapSort慢很多。但是它相對比較簡單,它適合于數據量在5000以下并且速度并不是特別重要的場合。它對于數據量較小的數列重復排序是非常好的。

    5 插入排序(InsertSort)

    插入排序通過把序列中的值插入一個已經排序好的序列中,直到該序列的結束。插入排序是對冒泡排序的改進。它比冒泡排序快2倍。一般不用在數據大于1000的場合下使用插入排序,或者重復排序超過200數據項的序列。

    6 冒泡排序(BubbleSort)

    冒泡排序是最慢的排序算法。在實際運用中它是效率最低的算法。它通過一趟又一趟地比較數組中的每一個元素,使較大的數據下沉,較小的數據上升。它是O(n^2)的算法。

    7 交換排序(ExchangeSort)和選擇排序(SelectSort)

    這兩種排序方法都是交換方法的排序算法,效率都是 O(n2)。在實際應用中處于和冒泡排序基本相同的地位。它們只是排序算法發展的初級階段,在實際中使用較少。

    8 基數排序(RadixSort)

    基數排序和通常的排序算法并不走同樣的路線。它是一種比較新穎的算法,但是它只能用于整數的排序,如果我們要把同樣的辦法運用到浮點數上,我們必須了解浮點數的存儲格式,并通過特殊的方式將浮點數映射到整數上,然后再映射回去,這是非常麻煩的事情,因此,它的使用同樣也不多。而且,最重要的是,這樣算法也需要較多的存儲空間。

    9 總結

    下面是一個總的表格,大致總結了我們常見的所有的排序算法的特點。
    排序法 平均時間最差情形穩定度額外空間備注
    冒泡 O(n2)  O(n2) 穩定O(1)n小時較好
    交換  O(n2)  O(n2)不穩定O(1)n小時較好
    選擇 O(n2) O(n2)不穩定O(1)n小時較好
    插入 O(n2) O(n2)穩定O(1)大部分已排序時較好
    基數O(logRB)O(logRB)穩定O(n)

    B是真數(0-9),

    R是基數(個十百)

    ShellO(nlogn)O(ns) 1<2不穩定O(1)s是所選分組
    快速O(nlogn)O(n2)不穩定O(nlogn)n大時較好
    歸并O(nlogn)O(nlogn)穩定O(1)n大時較好
    O(nlogn)O(nlogn)不穩定O(1)n大時較好

    posted @ 2012-11-10 22:30 三人行,必有我師焉 閱讀(336) | 評論 (0)編輯 收藏

    Eclipse Class Decompiler是一款Eclipse插件,整合了多種反編譯器,和Eclipse Class Viewer無縫集成,能夠很方便的使用插件查看類庫源碼,進行Debug調試。
    同時還提供了在線自動查找源代碼,查看Class二進制字節碼的功能。 


    Eclipse Class Decompiler對JDK的最低要求為JDK1.6, 能反編譯和debug各版本的Class文件,支持JDK8的Lambda語法,同時支持中文等非Ascii碼字符集的解析,支持Eclipse 3.6及以上所有版本的Eclipse。

    本插件支持Windows,Linux,Macosx 32位及64位操作系統。

    Github項目地址為:https://github.com/cnfree/Eclipse-Class-Decompiler

    請通過以下地址選擇一個可用的源在線安裝:

    http://cnfree.github.io/Eclipse-Class-Decompiler/update
    http://raw.githubusercontent.com/cnfree/eclipse/master/decompiler/update/
    http://www.cpupk.com/decompiler/update/

    離線包下載地址:
    https://github.com/cnfree/Eclipse-Class-Decompiler/releases/download/v2.10.0/eclipse-class-decompiler-update_v2.10.0.zip
     
    插件使用說明:

    下圖為Eclipse Class Decompiler的首選項頁面,可以選擇缺省的反編譯器工具,并進行反編譯器的基本設置。缺省的反編譯工具為JD-Core,JD-Core更為先進一些,支持泛型、Enum、注解等JDK1.5以后才有的新語法。

    首選項配置選項:
    1.重用緩存代碼:只會反編譯一次,以后每次打開該類文件,都顯示的是緩存的反編譯代碼。
    2.忽略已存在的源代碼:若未選中,則查看Class文件是否已綁定了Java源代碼,如果已綁定,則顯示Java源代碼,如果未綁定,則反編譯Class文件。若選中此項,則忽略已綁定的Java源代碼,顯示反編譯結果。
    3.顯示反編譯器報告:顯示反編譯器反編譯后生成的數據報告及異常信息。
    4.使用Eclipse代碼格式化工具:使用Eclipse格式化工具對反編譯結果重新格式化排版,反編譯整個Jar包時,此操作會消耗一些時間。
    5.使用Eclipse成員排序:使用Eclipse成員排序對反編譯結果重新格式化排版,反編譯整個Jar包時,此操作會消耗大量時間。
    6.以注釋方式輸出原始行號信息:如果Class文件包含原始行號信息,則會將行號信息以注釋的方式打印到反編譯結果中。
    7.根據行號對齊源代碼以便于調試:若選中該項,插件會采用AST工具分析反編譯結果,并根據行號信息調整代碼順序,以便于Debug過程中的單步跟蹤調試。
    8.設置類反編譯查看器作為缺省的類文件編輯器:默認為選中,將忽略Eclipse自帶的Class Viewer,每次Eclipse啟動后,默認使用本插件提供的類查看器打開Class文件。



    插件提供了系統菜單,工具欄,當打開了插件提供的類反編譯查看器后,會激活菜單和工具欄選項,可以方便的進行首選項配置,切換反編譯工具重新反編譯,以及導出反編譯結果。






    類反編譯查看器右鍵菜單包含了Eclipse自帶類查看器右鍵菜單的全部選項,并增加了一個“導出反編譯源代碼”菜單項。



    打開項目路徑下的Class文件,如果設置類反編譯查看器為缺省的查看器,直接雙擊Class文件即可,如果沒有設置為缺省查看器,可以使用右鍵菜單進行查看。




    同時插件也支持直接將外部的Class文件拖拽到Eclipse編輯器中進行反編譯。


    Eclipse Class Decompiler插件也提供了反編譯整個Jar文件或者Java包的反編譯。該操作支持Package Explorer對包顯示布局的操作,如果是平鋪模式布局,則導出的源代碼不包含子包,如果是層級模式布局,則導出選中的包及其所有的子包。




    Debug調試:可以在首選項選中對齊行號進行單步跟蹤調試,和普通的包含源代碼時的調試操作完全一致,同樣的也可以設置斷點進行跟蹤。當透視圖為Debug時,插件自動生成行號并進行對齊方便調試代碼,無需進行任何設置。


    博文地址:http://www.tkk7.com/cnfree/archive/2012/10/30/390457.html
    posted @ 2012-10-30 13:48 三人行,必有我師焉 閱讀(92517) | 評論 (43)編輯 收藏

    The original author of the JadClipse project maintains it no more, and the latest build 3.3.0 doesn't support eclipse 4.x, so I download the source code and update it.

    JadClipse for Eclipse 4.x also support Eclipse 3.x, and provides several new features:
     
    1. Integrate jad.exe into the plugin, don't need to set jad path in the preference page again.
    2. Add two options in the JadClipse main preference page:
        (1) Use Eclipse member sorter
        (2) Show decompiler report
    3. Update the formatting preference default settings, the "Output fields before methods" setting's default value changes to true.

    JadClipse for Eclipse 4.x Update Site: http://feeling.sourceforge.net/update

    Offline Archive Update File Download: 
    1. http://feeling.sourceforge.net/downloads/org.sf.feeling.decompiler_1.0.3.zip
    2. http://www.tkk7.com/Files/cnfree/org.sf.feeling.decompiler_1.0.3.zip
    posted @ 2012-10-15 17:45 三人行,必有我師焉 閱讀(7453) | 評論 (10)編輯 收藏

    http://www.open-open.com/lib/view/1326265166952

    http://blog.chinaunix.net/uid-22342564-id-3183018.html
    posted @ 2012-05-31 02:42 三人行,必有我師焉 閱讀(476) | 評論 (0)編輯 收藏

    com\maxmpz\audioplayer\widget\listwrappers\D800DC00 這個package 主要用于 PlayList 模型的操作。

    com\maxmpz\audioplayer\widget\listwrappers\D800DC00\D803DC04.java

    里面有個
        private static int D801DC01(Activity activity, int i)
        {
            TypedArray typedarray 
    = activity.obtainStyledAttributes(null, com.maxmpz.audioplayer.j.true.p, 00);
            
    int j = typedarray.getResourceId(i, 0);
            typedarray.recycle();
            
    return j;
        }

    Context.obtainStyledAttributes 實現控件屬性與XML定義綁定的代碼。 

    TypedArray其實就是一個存放資源的Array,首先從上下文中獲取到R.styleable。。。這個屬性資源的資源數組。 attrs是構造函數傳進來,應該就是對應attrs.xml文件。 a.getString(R.styleable。。。);這句代碼就是獲取attrs.xml中定義的屬性,并將這個屬性的值傳給本控件的mValue.最后,返回一個綁定結束的信號給資源:a.recycle();綁定結束

    相關學習文章:
    http://blog.csdn.net/aomandeshangxiao/article/details/7449973

    com.maxmpz.audioplayer.widget.listwrappers.0xE9 這個類,用于顯示文件夾列表,右上方有2個自定義的RadioButton,用來設置是平鋪模式顯示還是層級顯示。
    定義了一個ID為:flat_hier_group 的RadioGroup,里面有個2個自定義的RadioButton。

    <RadioGroup android:gravity="right" android:orientation="horizontal" android:id="@id/flat_hier_group" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true"
      xmlns:android
    ="http://schemas.android.com/apk/res/android">
        
    <RadioButton android:id="@id/flat_folders_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="0.0dip" android:button="@drawable/matte_flat_folders_selector" />
        
    <RadioButton android:id="@id/hier_folders_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="-8.0dip" android:button="@drawable/matte_hier_folders_selector" />
    </RadioGroup>

    matte_flat_folders_selector的XML定義為:
     

    <selector
      
    xmlns:android="http://schemas.android.com/apk/res/android">
        
    <item android:state_checked="true" android:drawable="@drawable/matte_flat_folders_selected" />
        
    <item android:state_checked="false" android:drawable="@drawable/matte_flat_folders" />
    </selector>

    自定義的RadioButton實際上就是張背景透明的圖片罷了。


    播放器列表的Layout布局文件為 list_with_big_header.xml。

    里面有個android:ellipsize屬性:
    EidtText和textview中內容過長的話自動換行,使用android:ellipsize與android:singleine可以解決,使只有一行。EditText不支持marquee

    關于android:ellipsize屬性更詳細的文章:http://www.cnblogs.com/chiao/archive/2011/08/20/2147250.html


    里面還有個 android:textAppearance 屬性,這里涉及到了Android的theme和style設置了,更詳細的文章參見:http://jiayanjujyj.iteye.com/blog/1392541
    posted @ 2012-05-23 11:59 三人行,必有我師焉 閱讀(426) | 評論 (0)編輯 收藏

    獲取屏幕Display: Activity.getWindowManager().getDefaultDisplay();
    獲取擴展存儲目錄:Environment.getExternalStorageDirectory()
    通過文件獲取Uri:Uri.fromFile(File)
    根據文件路徑獲取圖片:BitmapFactory.decodeFile(imageFilePath, bmpFactoryOptions)
    獲取相機Intent:new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    獲取相機拍照后的圖片:
    Bundle extras = intent.getExtras();
    Bitmap bmp = (Bitmap) extras.get("data");
    觸摸事件:onTouchEvent(MotionEvent ev)
    媒體播放器:android.media.MediaPlayer
    媒體控制器:android.widget.MediaController(和播放器不在同一個package下)
    SurfaceView是視圖(View)的繼承類,這個視圖里內嵌了一個專門用于繪制的Surface,類似于Canvas,但感覺比Canvas更高級。
    android.provider.MediaStore里包含了相關的Image,Video,Audio信息,可通過managedQuery方法來查詢和遍歷。
    Android中的AdapterView使用Adapter來獲取數據,和JFace中的ContentProvider對應。
    根據字符串路徑獲取Uri:
    Uri.parse((String)Path)
    封裝好的視頻View:android.widget.VideoView
    視頻錄制:android.media.MediaRecorder
    相機高畫質:CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);


    設置透明度(這是窗體本身的透明度,非背景)

    WindowManager.LayoutParams lp=getWindow().getAttributes();
                    lp.alpha=0.3f;
                  getWindow().setAttributes(lp);
                    
    alpha在0.0f到1.0f之間。1.0完全不透明,0.0f完全透明


    設置黑暗度

                    WindowManager.LayoutParams lp=getWindow().getAttributes();
                    lp.dimAmount=0.5f;
                    getWindow().setAttributes(lp);
                    getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

    dimAmount在0.0f和1.0f之間,0.0f完全不暗,1.0f全暗


    設置背景模糊

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,     
               WindowManager.LayoutParams.FLAG_BLUR_BEHIND);



    //調用瀏覽器 
    Uri uri = Uri.parse(""); 
    Intent it = new Intent(Intent.ACTION_VIEW,uri); 
    startActivity(it); 

    //顯示某個坐標在地圖上 
    Uri uri = Uri.parse("geo:38.899533,-77.036476"); 
    Intent it = new Intent(Intent.Action_VIEW,uri); 
    startActivity(it); 

    //顯示路徑 
    Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en"); 
    Intent it = new Intent(Intent.ACTION_VIEW,URI); 
    startActivity(it); 

    //撥打電話 
    Uri uri = Uri.parse("tel:10086"); 
    Intent it = new Intent(Intent.ACTION_DIAL, uri); 
    startActivity(it); 

    Uri uri = Uri.parse("tel.10086"); 
    Intent it =new Intent(Intent.ACTION_CALL,uri); 
    //需要添加 <uses-permission id="android.permission.CALL_PHONE" /> 這個權限到androidmanifest.xml 

    //發送短信或彩信 
    Intent it = new Intent(Intent.ACTION_VIEW); 
    it.putExtra("sms_body", "The SMS text"); 
    it.setType("vnd.android-dir/mms-sms"); 
    startActivity(it); 

    //發送短信 
    Uri uri = Uri.parse("smsto:10086"); 
    Intent it = new Intent(Intent.ACTION_SENDTO, uri); 
    it.putExtra("sms_body", "cwj"); 
    startActivity(it); 

    //發送彩信 
    Uri uri = Uri.parse("content://media/external/images/media/23"); 
    Intent it = new Intent(Intent.ACTION_SEND); 
    it.putExtra("sms_body", "some text"); 
    it.putExtra(Intent.EXTRA_STREAM, uri); 
    it.setType("image/png"); 
    startActivity(it); 

    //發送郵件 
    Uri uri = Uri.parse("mailto:android123@163.com"); 
    Intent it = new Intent(Intent.ACTION_SENDTO, uri); 
    startActivity(it); 

    Intent it = new Intent(Intent.ACTION_SEND); 
    it.putExtra(Intent.EXTRA_EMAIL, android123@163.com); 
    it.putExtra(Intent.EXTRA_TEXT, "The email body text"); 
    it.setType("text/plain"); 
    startActivity(Intent.createChooser(it, "Choose Email Client")); 

    Intent it=new Intent(Intent.ACTION_SEND); 
    String[] tos={"me@abc.com"}; 
    String[] ccs={"you@abc.com"}; 
    it.putExtra(Intent.EXTRA_EMAIL, tos); 
    it.putExtra(Intent.EXTRA_CC, ccs); 
    it.putExtra(Intent.EXTRA_TEXT, "The email body text"); 
    it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text"); 
    it.setType("message/rfc822"); 
    startActivity(Intent.createChooser(it, "Choose Email Client")); 

    //播放媒體文件 
    Intent it = new Intent(Intent.ACTION_VIEW); 
    Uri uri = Uri.parse("file:///sdcard/cwj.mp3"); 
    it.setDataAndType(uri, "audio/mp3"); 
    startActivity(it); 

    Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1"); 
    Intent it = new Intent(Intent.ACTION_VIEW, uri); 
    startActivity(it); 

    //卸載APK 
    Uri uri = Uri.fromParts("package", strPackageName, null); 
    Intent it = new Intent(Intent.ACTION_DELETE, uri); 
    startActivity(it); 

    //卸載apk 2 
    Uri uninstallUri = Uri.fromParts("package", "xxx", null); 
    returnIt = new Intent(Intent.ACTION_DELETE, uninstallUri); 

    //安裝APK 
    Uri installUri = Uri.fromParts("package", "xxx", null); 
    returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri); 

    //播放音樂 
    Uri playUri = Uri.parse("file:///sdcard/download/sth.mp3"); 
    returnIt = new Intent(Intent.ACTION_VIEW, playUri); 

    //發送附近 
    Intent it = new Intent(Intent.ACTION_SEND); 
    it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text"); 
    it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/cwj.mp3"); 
    sendIntent.setType("audio/mp3"); 
    startActivity(Intent.createChooser(it, "Choose Email Client")); 

    //market上某個應用信,pkg_name就是應用的packageName 
    Uri uri = Uri.parse("market://search?q=pname:pkg_name"); 
    Intent it = new Intent(Intent.ACTION_VIEW, uri); 
    startActivity(it); 

    //market上某個應用信息,app_id可以通過www網站看下 
    Uri uri = Uri.parse("market://details?id=app_id"); 
    Intent it = new Intent(Intent.ACTION_VIEW, uri); 
    startActivity(it); 

    //調用搜索 
    Intent intent = new Intent(); 
    intent.setAction(Intent.ACTION_WEB_SEARCH); 
    intent.putExtra(SearchManager.QUERY,"android123") 
    startActivity(intent); 

    //調用分享菜單 
    Intent intent=new Intent(Intent.ACTION_SEND); 
    intent.setType("text/plain"); //分享的數據類型 
    intent.putExtra(Intent.EXTRA_SUBJECT, "subject"); //主題 
    intent.putExtra(Intent.EXTRA_TEXT, "content"); //內容 
    startActivity(Intent.createChooser(intent, "title")); //目標應用選擇對話框的標題


    獲取Location:
    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_COARSE);
    criteria.setPowerRequirement(Criteria.POWER_LOW);
    LocationManager locManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    if(locManager.getBestProvider(criteria, true) != null)
    myLocation = locManager.getLastKnownLocation(locManager.getBestProvider(criteria, true));
    else {
    myLocation = new Location("gps");
    myLocation.setLatitude(47.100301);
    myLocation.setLongitude(-119.982465);
    }
    posted @ 2012-05-05 19:41 三人行,必有我師焉 閱讀(850) | 評論 (0)編輯 收藏


    3.1以下版本升級到最新版最好先還原到初始檔,然后重新備份一下初始檔。

    如果不希望重新開局,以下提供正確的操作步驟:
    1、進入備份與還原界面。
    2、選擇“備份當前游戲數據“進行備份。
    3、選擇“ 還原游戲至初始檔狀態“進行還原。
    4、選擇“設置當前游戲數據作為游戲初始檔”進行備份。
    5、在還原備份數據的列表中選擇步驟2備份的數據存檔進行還原

    就可以正常進入游戲,并且更新了原始檔。


    3.9版更新內容:
    1、修正了若干已知Bug。
    2、象兵及戰車數據使用兵種第二防御數據。
    3、全面更新地圖坐標算法,防止無法進入游戲或者武將位于山地無法移動。
    4、增加了切換游戲勢力功能,可以無需開檔游玩任意勢力。
    5、增加了東州兵和駱駝兵模的防跳補丁。


    3.8版更新內容:
    1、增加了解鎖朝廷、在野、亂軍勢力的功能。
    2、增加了解除諸葛亮外出云游狀態的腳本補丁,玩家可以使用任何勢力收買諸葛亮,并且激活三顧茅廬技能。
    3、增加了全勢力官爵升級的腳本補丁。
    4、增加了部分武將特殊技能全勢力激活的腳本補丁。
    5、增加了創建新兵種功能。


    3.7版更新內容:
    1、修正了一些細節上的bug。
    2、增加了霧隱版呂玲綺衛隊女兵模型的導入。
    3、增加了武將模型作為騎兵模型的導入,并且可自由移除已導入的模型。
    4、步兵的士兵模型可以選擇將軍模型,騎兵的士兵模型可以選擇已導入的將軍模型和霧影女兵模型。

    3.6版更新內容:
    1、修正了導入弩兵陷陣營戰斗跳出的bug。
    2、修正了收買武將修改器發生異常的bug。
    3、修正了更換異族武將勢力游戲跳出的bug。
    4、修改了一些2種勢力都有的武將相關的bug。
    5、新建武將后清空武將編輯頁面狀態。
    6、編輯武將能力頁面新增了編輯武將衛隊經驗選項。
    7、基本修改頁面增加了所有兵種生產回合、費用下調的修改。
    8、基本修改頁面增加了所有城市建筑生產回合、費用下調的修改。

    3.5版更新內容:
    1、修正了兵種修改頁面中兵種名稱顯示錯亂的bug,現在很容易分清雇傭兵和城市招募了。
    2、增加了亂軍刷新概率的修改。
    3、增加導入弩騎高順衛隊和弩兵陷陣營的功能。

    3.4版更新內容:
    1、修正了編輯大眾衛隊武將名字時會改變大眾衛隊名稱的bug。
    2、增加了編輯勢力地圖顏色的功能。
    3、增加了降低敵方所有武將忠誠度的功能。
    4、解決游戲中部分武將心灰意冷狀態下無法被收買的bug。

    3.3版更新內容:
    1、修正了一些bug,比如編輯武將坐標會發生變化的bug。
    2、創建新武將頁面的爵位增加了自定義功能。
    3、難度修改頁面中,增加了禁用電腦驛站加成,禁止電腦生產刺客,以及能夠編輯電腦太守加成幾率的新功能。

    3.2版更新內容:
    1、增加了1.9a中特有的馬匹,1.9a特有的馬匹一般沖量都比較大,老版馬匹沖量較小。
    2、修正了武將地圖坐標自動計算錯誤的bug。我把RGB顏色值寫錯了,另外遺漏了森林顏色。
    3、修正了編輯新武將坐標和兵模無效生效的bug。
    4、增加了孫劉曹中特殊武將不能被交換到其他勢力的注釋。

    3.1版更新內容:
    1、修正了未對掌旗官旗幟,城市旗幟,援軍,盟軍旗幟做修改的bug。
    2、修正了編輯武將人物列傳未繁體化,換行的bug。
    3、增加了修改勢力后代武將姓氏的功能。

    3.0.1版更新內容:
    1、更新了壓縮武將圖片的算法,讓武將圖片顯示的更加清晰。
    2、修正了解壓縮更新包,僅支持GBK編碼的bug。

    3.0版更新內容:
    1、新增編輯勢力功能。
    2、修正編輯武將坐標可能導致游戲異常的bug。
    3、修正禁止電腦驛站暴兵的bug(此處bug是由于1.9和1.7的驛站代碼不一樣導致的)。
    4、增加了添加勢力兵種對兵營的要求,提高游戲的可玩性。
    5、增加了對城墻生命值的修改。
    6、增加了武將身份設置功能,方便玩家自定義君主或者繼承人。
    7、增加了修改器的自動更新功能,3.0及其后續版本若發現修改器有新版本,將會自動更新到最新版本。

    注意事項:
    因為3.0版改動較大,若使用編輯勢力功能,請首先還原游戲數據到初始狀態,重新做一次原始備份檔,否則編輯勢力后,無法還原到游戲原始狀態。


    說明:
    1、修改器安裝文件夾路徑最好不要包含中文或者空格(有個別用戶因為中文和空格路徑問題無法啟動修改器,調試器會提示:
    Error occurred during initialization of VM
    java.lang.UnsatisfiedLinkError: no zip in java.library.path


    2、正常情況下,請使用“三國全面戰爭1.9a修改器”運行修改器。

    3、非正常情況下,比如修改器無法啟動成功,或者一直處于系統初始化狀態,或者彈出錯誤窗口(不包括修改失敗),請使用“三國全面戰爭1.9a修改器(調試器)”運行修改器。調試器啟動時會顯示一個黑色的dos窗口,如運行時發生錯誤,錯誤信息會打印到黑色dos窗口,請截圖或者復制錯誤信息,發送到:http://www.1mod.org/thread-37918-1-1.html,我看見后會及時修正錯誤。

    4、游戲原始備份檔下載地址:http://feeling.sourceforge.net/patch/1.9a/default.zip
    如果你需要恢復原始數據,而又未作原始檔備份,可以從此地址下載。
    恢復原始數據的2種方法:
    1、解壓縮后,復制data目錄下的數據文件到游戲中,替換游戲數據文件。
    2、復制壓縮文件到游戲目錄下的/patch/bak目錄下,替換掉你自己的原始備份檔,然后通過修改器恢復原始備份檔。

    5、關于殺毒軟件誤報問題:
    (1)如果是國產殺毒軟件報病毒,請你不要抱怨修改器,去抱怨那些垃圾殺毒軟件吧,技術不過關,老是誤報。
    (2)如果是國外知名殺毒軟件報病毒,比如卡巴斯基,麥咖啡,微軟MSE等等,你可以截圖發給我。
    (3)推薦使用微軟MSE,口碑不錯,完全免費。


    6、修改需理智,請謹慎修改,方能提高游戲的可玩性。










    下載地址:http://feeling.sourceforge.net/patch/1.9a/patch_1.9a_3.9.zip

    修改器簡易教程:http://tieba.baidu.com/p/1418490788


    小技巧:
    1.如果希望新建武將成為勢力君主,可以在創建后和武將勢力君主交換。
    2.能夠更換所屬勢力的武將不能有后代,也不能是勢力君主或者繼承人,如果希望更換這些武將的勢力,可以先和勢力內的沒有后代的垃圾武將交換一下,讓他們成為自由身,就可以更換武將所屬勢力了。
    posted @ 2012-01-25 22:57 三人行,必有我師焉 閱讀(119591) | 評論 (85)編輯 收藏

    關于PaletteData的生成:
    case Gdip.PixelFormat16bppARGB1555:                                        
    case Gdip.PixelFormat16bppRGB555: 
        paletteData = new PaletteData(0x7C00, 0x3E0, 0x1F); 
    break;
    case Gdip.PixelFormat16bppRGB565: 
        paletteData = new PaletteData(0xF800, 0x7E0, 0x1F); 
    break;
    case Gdip.PixelFormat24bppRGB: 
        paletteData = new PaletteData(0xFF, 0xFF00, 0xFF0000); 
    break;
    case Gdip.PixelFormat32bppRGB:
    case Gdip.PixelFormat32bppARGB: 
        paletteData = new PaletteData(0xFF00, 0xFF0000, 0xFF000000); 
    break;

    32位ImageData中的data是以RGBA的順序存儲的。data[0]:red,data[1]:green,data[2]:blue,data[3]:alpha

    從byte[]中讀取RGB pixel:
    public static int getPixelFromRGBA( int depth, byte[] data )
    {
            switch ( depth )
            {
                case 32 :
                    return ( ( data[0] & 0xFF ) << 24 )
                            + ( ( data[1] & 0xFF ) << 16 )
                            + ( ( data[2] & 0xFF ) << 8 )
                            + ( data[3] & 0xFF );
                case 24 :
                    return ( ( data[0] & 0xFF ) << 16 )
                            + ( ( data[1] & 0xFF ) << 8 )
                            + ( data[2] & 0xFF );
                case 16 :
                    return ( ( data[1] & 0xFF ) << 8 ) + ( data[0] & 0xFF );
                case 8 :
                    return data[0] & 0xFF;
            }
            SWT.error( SWT.ERROR_UNSUPPORTED_DEPTH );
            return 0;
    }

    從pixel中取出RGB值:
    RGB rgb = imagedata.palette.getRGB( pixel );

    生成一個空的32位圖片:
    ImageData dest = new ImageData( width,
                    height,
                    32,
                    new PaletteData( 0xFF00, 0xFF0000, 0xFF000000 ) );

    24位透明圖片轉成32位透明圖片:
        public static ImageData convertToRGBA( ImageData src )
        {
            ImageData dest = new ImageData( src.width,
                    src.height,
                    32,
                    new PaletteData( 0xFF00, 0xFF0000, 0xFF000000 ) );

            for ( int x = 0; x < src.width; x++ )
            {
                for ( int y = 0; y < src.height; y++ )
                {
                    int pixel = src.getPixel( x, y );
                    RGB rgb = src.palette.getRGB( pixel );

                    byte[] rgba = new byte[4];

                    rgba[0] = (byte) rgb.red;
                    rgba[1] = (byte) rgb.green;
                    rgba[2] = (byte) rgb.blue;

                    if ( pixel == src.transparentPixel )
                    {
                        rgba[3] = (byte) ( 0 );
                    }
                    else
                    {
                        rgba[3] = (byte) ( 255 );
                    }
                    dest.setPixel( x, y, getPixelFromRGBA( 32, rgba ) );
                }
            }
            return dest;
        }

    posted @ 2012-01-15 13:49 三人行,必有我師焉 閱讀(3566) | 評論 (1)編輯 收藏

    SourceForge最近實在太慢了,忍無可忍,每天浪費我大量時間……終于讓我不得不投向GitHub的懷抱……
    posted @ 2012-01-14 16:33 三人行,必有我師焉 閱讀(2274) | 評論 (0)編輯 收藏

    JDK1.6的File.createTempFile方法有bug,在我的機器上第一次調用該方法需要耗時5秒時間,換了好幾個1.6的版本均有該問題。JDK1.4,1.5則無此問題。

    不一定所有的機器都有此問題,不過這兒肯定是有問題的,起碼在我的機器上有問題。
    posted @ 2012-01-13 15:51 三人行,必有我師焉 閱讀(1633) | 評論 (2)編輯 收藏

    僅列出標題
    共9頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 
    GitHub |  開源中國社區 |  maven倉庫 |  文件格式轉換 
    主站蜘蛛池模板: 免费羞羞视频网站| 免费看韩国黄a片在线观看| 亚洲国产欧洲综合997久久| 59pao成国产成视频永久免费 | 女人张开腿给人桶免费视频| 亚洲视频日韩视频| 日韩在线播放全免费| 亚洲精品国精品久久99热| 免费视频成人国产精品网站| 亚洲婷婷国产精品电影人久久| 一本到卡二卡三卡免费高| 成人免费网站在线观看| 亚洲人成色777777老人头| 免费人成年轻人电影| 一级午夜免费视频| 国产亚洲免费的视频看| 大片免费观看92在线视频线视频| 成人免费午夜无码视频| 亚洲美女视频一区| 最近免费中文字幕大全视频| 国产亚洲蜜芽精品久久| 国产亚洲色婷婷久久99精品| 最近免费字幕中文大全视频 | 中文字幕亚洲日本岛国片| 国产偷国产偷亚洲清高APP| 亚洲AⅤ无码一区二区三区在线| 亚洲av一本岛在线播放| 国产免费资源高清小视频在线观看| 亚洲成人激情小说| 四虎国产精品免费久久| 理论秋霞在线看免费| 国产乱子伦片免费观看中字| a级在线免费观看| 亚洲国产另类久久久精品小说| 日韩精品无码一区二区三区免费| 香蕉大伊亚洲人在线观看| 国产亚洲欧洲Aⅴ综合一区 | 免费一级做a爰片性色毛片| a级毛片免费在线观看| 亚洲一区二区三区国产精华液| 伊人久久大香线蕉亚洲五月天|