diff --git a/app/build.gradle b/app/build.gradle index 9df9b07..059c827 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,6 +2,7 @@ import org.apache.tools.ant.taskdefs.condition.Os apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' // Google Services plugin +apply plugin: 'org.greenrobot.greendao' android { compileSdkVersion PROP_COMPILE_SDK_VERSION.toInteger() @@ -170,6 +171,7 @@ dependencies { implementation 'com.google.firebase:firebase-auth:19.3.2' implementation 'com.google.code.gson:gson:2.7' implementation 'com.android.support:multidex:1.0.3' + implementation 'org.greenrobot:greendao:3.3.0' compile 'com.tencent.bugly:crashreport:latest.release' compile 'com.tencent.bugly:nativecrashreport:latest.release' @@ -229,3 +231,10 @@ dependencies { } +greendao { + schemaVersion 1 //数据库版本号 + daoPackage 'com.jc.jcfw.db'// 设置DaoMaster、DaoSession、Dao 包名 +// targetGenDir 'src'//设置DaoMaster、DaoSession、Dao目录 +} + + diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 2bd503f..92a50d6 100755 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -46,6 +46,16 @@ -dontwarn com.tencent.bugly.** -keep public class com.tencent.bugly.**{*;} +-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao { +public static java.lang.String TABLENAME; +} +-keep class **$Properties { *; } + +# If you do NOT use SQLCipher: +-dontwarn net.sqlcipher.database.** +# If you do NOT use RxJava: +-dontwarn rx.** + -keep class * { public private *; } diff --git a/app/src/com/jc/jcfw/JcSDK.java b/app/src/com/jc/jcfw/JcSDK.java index 8bd02a4..731b8cd 100644 --- a/app/src/com/jc/jcfw/JcSDK.java +++ b/app/src/com/jc/jcfw/JcSDK.java @@ -13,6 +13,7 @@ import android.widget.Toast; import com.google.firebase.analytics.FirebaseAnalytics; import com.jc.jcfw.util.IdUtil; +import com.jc.jcfw.util.Leaderboard; import com.jc.jcfw.util.StorageUtil; import com.jc.jcfw.util.StringUtil; import com.tencent.bugly.crashreport.CrashReport; @@ -31,6 +32,7 @@ public class JcSDK { private static Vibrator vibrator; private static FirebaseAnalytics mFirebaseAnalytics; private static SharedPreferences sharedPref; + private static Leaderboard leaderboard; public static void init(Context context) { isDebug = isApkInDebug(context); @@ -38,6 +40,11 @@ public class JcSDK { vibrator = (Vibrator) AppActivity.app.getSystemService(Context.VIBRATOR_SERVICE); mFirebaseAnalytics = ((AppActivity)context).getmFirebaseAnalytics(); sharedPref = PreferenceManager.getDefaultSharedPreferences(AppActivity.app); + leaderboard = Leaderboard.getInstance(sharedPref); +// String[] names = NameUtil.generateEname(1, 40); +// for(String name: names) { +// System.out.println(name); +// } } public static void showBanner() { @@ -167,7 +174,12 @@ public class JcSDK { StorageUtil.removeString(sharedPref, k); } } - - } + public static String lbTop20(String accountId) { + return leaderboard.getTop20(accountId); + } + public static String updateRank(String accountId, String name, int score) { + return leaderboard.updateRank(accountId, name, score); + } + } diff --git a/app/src/com/jc/jcfw/bean/RecordBean.java b/app/src/com/jc/jcfw/bean/RecordBean.java new file mode 100644 index 0000000..03af950 --- /dev/null +++ b/app/src/com/jc/jcfw/bean/RecordBean.java @@ -0,0 +1,95 @@ +package com.jc.jcfw.bean; + +import org.greenrobot.greendao.annotation.Entity; +import org.greenrobot.greendao.annotation.Id; +import org.greenrobot.greendao.annotation.Index; +import org.greenrobot.greendao.annotation.Generated; +import org.json.JSONException; +import org.json.JSONObject; + +@Entity(indexes = { + @Index(value = "score DESC") +}) +public class RecordBean { + @Id + private Long id; + private String accountId; + private String nickname; + private int score; + private int rank; + private String day; + + @Generated(hash = 1609371103) + public RecordBean(Long id, String accountId, String nickname, int score, + int rank, String day) { + this.id = id; + this.accountId = accountId; + this.nickname = nickname; + this.score = score; + this.rank = rank; + this.day = day; + } + + @Generated(hash = 96196931) + public RecordBean() { + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getAccountId() { + return accountId; + } + + public void setAccountId(String accountId) { + this.accountId = accountId; + } + + public String getNickname() { + return nickname; + } + + public void setNickname(String nickname) { + this.nickname = nickname; + } + + public int getScore() { + return score; + } + + public void setScore(int score) { + this.score = score; + } + + public int getRank() { + return rank; + } + + public void setRank(int rank) { + this.rank = rank; + } + + public String getDay() { + return day; + } + + public void setDay(String day) { + this.day = day; + } + public JSONObject toJSONObj() { + JSONObject obj = new JSONObject(); + try { + obj.put("nickname", this.nickname); + obj.put("accountId", this.accountId); + obj.put("score", this.score); + obj.put("rank", this.rank); + } catch (JSONException ignored) {} + + return obj; + } +} diff --git a/app/src/com/jc/jcfw/util/ArrayUtils.java b/app/src/com/jc/jcfw/util/ArrayUtils.java new file mode 100644 index 0000000..85a9ebd --- /dev/null +++ b/app/src/com/jc/jcfw/util/ArrayUtils.java @@ -0,0 +1,28 @@ +package com.jc.jcfw.util; + +import java.util.Arrays; +import java.util.Random; + +public class ArrayUtils { + private static Random rand = new Random(); + + public static void swap(T[] a, int i, int j) { + T temp = a[i]; + a[i] = a[j]; + a[j] = temp; + } + + public static void shuffle(T[] arr) { + int length = arr.length; + for (int i = length; i > 0; i--) { + int randInd = rand.nextInt(i); + swap(arr, randInd, i - 1); + } + } + + public static T[] concat(T[] first, T[] second) { + T[] result = Arrays.copyOf(first, first.length + second.length); + System.arraycopy(second, 0, result, first.length, second.length); + return result; + } +} diff --git a/app/src/com/jc/jcfw/util/DateUtil.java b/app/src/com/jc/jcfw/util/DateUtil.java new file mode 100644 index 0000000..c000ac8 --- /dev/null +++ b/app/src/com/jc/jcfw/util/DateUtil.java @@ -0,0 +1,20 @@ +package com.jc.jcfw.util; + +import android.annotation.SuppressLint; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; + +public class DateUtil { + public static String getFirstWeekDay() { + Calendar calendar = Calendar.getInstance(); + int min = calendar.getActualMinimum(Calendar.DAY_OF_WEEK); //获取周开始基准 + int current = calendar.get(Calendar.DAY_OF_WEEK); //获取当天周内天数 + calendar.add(Calendar.DAY_OF_WEEK, min-current); //当天-基准,获取周开始日期 + Date start = calendar.getTime(); + @SuppressLint("SimpleDateFormat") DateFormat sdf = new SimpleDateFormat("yyyy_MM_dd"); + return sdf.format(start); + } +} diff --git a/app/src/com/jc/jcfw/util/FileUtil.java b/app/src/com/jc/jcfw/util/FileUtil.java new file mode 100644 index 0000000..89c6301 --- /dev/null +++ b/app/src/com/jc/jcfw/util/FileUtil.java @@ -0,0 +1,48 @@ +package com.jc.jcfw.util; + +import org.cocos2dx.javascript.AppActivity; + +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; + +import cz.msebera.android.httpclient.util.EncodingUtils; + +import static android.content.Context.MODE_PRIVATE; + +public class FileUtil { + //写数据 + public void writeFile(String fileName,String writestr) throws IOException { + try{ + + FileOutputStream fout = AppActivity.app.openFileOutput(fileName, MODE_PRIVATE); + + byte [] bytes = writestr.getBytes(); + + fout.write(bytes); + + fout.close(); + } + + catch(Exception e){ + e.printStackTrace(); + } + } + + //读数据 + public String readFile(String fileName) throws IOException{ + String res=""; + try{ + FileInputStream fin = AppActivity.app.openFileInput(fileName); + int length = fin.available(); + byte [] buffer = new byte[length]; + fin.read(buffer); + res = EncodingUtils.getString(buffer, "UTF-8"); + fin.close(); + } + catch(Exception e){ + e.printStackTrace(); + } + return res; + } +} diff --git a/app/src/com/jc/jcfw/util/Leaderboard.java b/app/src/com/jc/jcfw/util/Leaderboard.java new file mode 100644 index 0000000..6bb6f2b --- /dev/null +++ b/app/src/com/jc/jcfw/util/Leaderboard.java @@ -0,0 +1,177 @@ +package com.jc.jcfw.util; + +import android.content.SharedPreferences; + +import com.jc.jcfw.bean.RecordBean; +import com.jc.jcfw.db.DaoSession; +import com.jc.jcfw.db.RecordBeanDao; + +import org.cocos2dx.javascript.AppActivity; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class Leaderboard { + private int scoreMax = 100000; + private int scoreMin = 80000; + private int scoreSegmented; + private int topCount = 20; + private static Leaderboard mInstance; + private final String LEADER_BOARD_KEY = "leaderboard"; + + private SharedPreferences sharedPref; + private JSONArray scoreList; + private String dataKey; + private RecordBeanDao recordBeanDao; + + public Leaderboard(SharedPreferences sharedPref) { + this.sharedPref = sharedPref; + this.dataKey = DateUtil.getFirstWeekDay(); + this.scoreSegmented = (this.scoreMax - this.scoreMin) / this.topCount; + DaoSession daoSession = AppActivity.app.getDaoSession(); + recordBeanDao = daoSession.getRecordBeanDao(); + this.prepareData(); + } + public static Leaderboard getInstance(SharedPreferences sharedPref) { + if (null == mInstance) { + mInstance = new Leaderboard(sharedPref); + } + return mInstance; + } + + + private void prepareData() { + List records = recordBeanDao.queryRaw("where DAY = ?", this.dataKey); + if (records == null || records.size() == 0) { + recordBeanDao.deleteAll(); + records = this.generateTop(); + } + } + /** + * 根据名次生成分数 + * @param rank 名次 + * @return score + */ + private int generateScore(int rank) { + Random random = new Random(); + int scoreRandom = (int) (random.nextDouble() * scoreSegmented); + return scoreMax - scoreSegmented * rank - scoreRandom; + } + private int generateScore(int score, int isPre) { + Random random = new Random(); + int scoreRandom = (int) (random.nextDouble() * 10); + return score + scoreRandom * isPre; + } + private int generateRank(int score) { + if (score >= this.scoreMin) { + int rank = (this.scoreMax - score) / this.scoreSegmented + 1; + return rank > 0 ? rank : 1; + } else { + return (this.scoreMin - score) / 10 + this.topCount; + + } + } + private List generateTop() { + List records = new ArrayList<>(); + String[] top20s = NameUtil.generateRandom(topCount); + for (int i = 0; i < topCount; i ++) { + RecordBean record = new RecordBean(); + record.setAccountId(""); + record.setNickname(top20s[i]); + record.setScore(generateScore(i)); + record.setRank(i + 1); + record.setDay(this.dataKey); + recordBeanDao.insert(record); + records.add(record); + } + return records; + } + + public String getTop20(String accountId) { + List records = recordBeanDao.queryBuilder() + .orderDesc(RecordBeanDao.Properties.Score) + .limit(20) + .build().list(); + List myRecords = recordBeanDao.queryRaw("where ACCOUNT_ID = ?", accountId); + if (records == null || records.size() == 0) { + records = this.generateTop(); + } + JSONObject obj = new JSONObject(); + try { + int selfScore = 0; + int selfRank = 0; + JSONArray datas = new JSONArray(); + for (int i = 0; i< records.size(); i++) { + RecordBean record = records.get(i); + datas.put(record.toJSONObj()); + } + obj.put("records", datas); + if (myRecords != null && myRecords.size() > 0) { + RecordBean record = myRecords.get(0); + selfScore = record.getScore(); + selfRank = record.getRank(); + } + obj.put("userRank", selfRank); + obj.put("userScore", selfScore); + + } catch(JSONException ignored) { + } + return obj.toString(); + } + + public String updateRank(String accountId, String name, int score) { + RecordBean record = recordBeanDao.queryBuilder().where(RecordBeanDao.Properties.AccountId.eq(accountId)).build().unique(); + int rank = this.generateRank(score); + if (record != null) { + if (score > record.getScore()) { + record.setScore(score); + record.setRank(rank); + recordBeanDao.update(record); + } + } else { + record = new RecordBean(); + record.setAccountId(accountId); + record.setScore(score); + record.setNickname(name); + record.setRank(rank); + recordBeanDao.insert(record); + } + JSONObject result = new JSONObject(); + RecordBean recordPre; + if (record.getRank() > 1) { + recordPre = recordBeanDao.queryBuilder().where(RecordBeanDao.Properties.Rank.eq(record.getRank() - 1)).build().unique(); + if (recordPre == null) { + recordPre = new RecordBean(); + recordPre.setNickname(NameUtil.generateRandomOne()); + recordPre.setScore(this.generateScore(record.getScore(), 1)); + recordPre.setRank(record.getRank() - 1); + recordBeanDao.insert(recordPre); + } + try { + result.put("preRecord", recordPre.toJSONObj()); + } catch(JSONException ignored) {} + + } + RecordBean recordNext = recordBeanDao.queryBuilder().where(RecordBeanDao.Properties.Rank.eq(record.getRank() + 1)).build().unique(); + if (recordNext == null) { + recordNext = new RecordBean(); + recordNext.setNickname(NameUtil.generateRandomOne()); + recordNext.setScore(this.generateScore(record.getScore(), -1)); + recordNext.setRank(record.getRank() + 1); + recordBeanDao.insert(recordNext); + } + + + try { + result.put("userRank", record.getRank()); + result.put("userScore", record.getScore()); + result.put("nextRecord", recordNext.toJSONObj()); + } catch(JSONException ignored) { + } + return result.toString(); + } +} diff --git a/app/src/com/jc/jcfw/util/NameUtil.java b/app/src/com/jc/jcfw/util/NameUtil.java new file mode 100644 index 0000000..ae0e2c1 --- /dev/null +++ b/app/src/com/jc/jcfw/util/NameUtil.java @@ -0,0 +1,41 @@ +package com.jc.jcfw.util; + + +import java.util.Arrays; +import java.util.UUID; + +public class NameUtil { + private static String[] maleNames = {"Paul","Small","Dale","Daley","Gabriel","Jack","Godly","Maddox","Beneficient","Samson","Vance","Thresher","Paxton","Dalton","Gale","Jacob","Conqueror","Magnus","Great","Samuel","Vaughan","Percival","Percy","Damon","Galvin","Sparrow","James","Jimmy","Supplanter","Malcolm","Scott","Vernon","Flourishing","Perry","Daniel","Gardner","Gardener","Jarvis","Melvin","Servant","Sean","Victor","Peter","Darcy","Dark","Garret","Jason","Marcus","Warlike","Sebastian","Majestic","Vincent","Victorious","Peyton","Darian","Wealthy","Garrick","Jasper","Mark","Marc","Seth","Wallace","Stranger","Philbert","Darell","Darrel","Beloved","Garth","Herdsman","Jed","Marlon","Falcon","Seymour","Walter","Philip","David","Swift","Nimble","Gavin","Jeffrey","Martin","Shamus","Walton","Phineas","Davin","George","Farmer","Jeremiah","Jeremy","Exalted","Marvin","Sea","Shawn","Ward","Guardian","Pierce","Dean","Gerald","Gerard","Gerret","Jerome","Matthew","Shelley","Articulate","Warren","Quade","Fourth","Declan","Gideon","Jesse","Maurice","Sherard","Washington","Quenby","Delmar","Mariner","Gifford","Gift-Brave","John","Max","Maxwell","Sheridan","Wayne","Quillan","Cub","Denley","Gilbert","Pledge","Jonathan","Medwin","Sherlock","Fair-Haired","Wesley","Quimby","Dennis","Giles","Joseph","Joey","Joe","Melville","Sherman","Wilbur","Quentin","Derek","Gilroy","Joshua","Merlin","Bird","Sherwin","Willard","Quinby","Dermot","Glenn","Valley","Justin","Just","Michael","Sidney","Earthy","William","Will","Quincy","Derwin","Goddard","Kane","Honor","Milburn","Sigmund","Willis","Quinlan","Strong","Des","Desmond","Godfrey","Keene","Sharp","Miles","Soldier","Silas","Winston","Quinn","Dexter","Dexterous","Godwin","Keegan","Fiery","Monroe","Simon","Winthrop","Ralph","Dillon","Faithful","Graham","Keaton","Montague","Sinclair","Wyatt","Guide","Ramsey","Dion","Grant","Keith","Forest","Montgomery","Mountain","Sloane","Warrior","Wylie","Beguiling","Randolph","Dirk","Grayson","Kelsey","Morgan","Solomon","Peaceful","Wyman","Raymond","Dixon","Gregory","Kelvin","Morris","Moorish","Spencer","Steward","Zachariah","Reginald","Power","Dominic","Gresham","Kendall","Morton","Stacy","Zachary","Renfred","Peacemaker","Donald","Ruler","Griswald","Griswold","Kendrick","Murray","Seaman","Stanley","Stan","Zebadiah","Rex","King","Dorian","Grover","Kenneth","Ken","Handsome","Nathaniel","Nathan","Stephen","Stefan","Crown","Zane","Rhett","Stream","Douglas","Guy","Kent","Neal","Champion","Sterling","Zebediah","Richard","Doyle","Hadden","Kenway","Neville","Stewart","Stuart","Ridley","Drake","Dragon","Hadley","Kenyon","Nicholas","Theobold","Patriotic","Riley","Valiant","Drew","Trustworthy","Hadwin","Kerry","Nigel","Black","Theodore","Robert","Robin","Driscoll","Interpreter","Hal","Kerwin","Noel","Thomas","Dependable","Roderick","Dudley","Halbert","Kevin","Norman","Norseman","Timothy","Rodney","Famous","Duncan","Halden","Half-Dane","Kiefer","Norris","Caretaker","Titus","Roger","Durwin","Hale","Robust","Kilby","Olaf","Relic","Tobias","Roland","Dwayne","Hall","Kilian","Blind","Olin","Holly","Toby","Rolf","Wolf","Dwight","Halsey","Kim","Chief","Oliver","Todd","Fox","Ronald","Dylan","Loyal","Hamlin","Kimball","Orson","Tony","Rory","Earl","Nobleman","Hanley","Kingsley","Oscar","Travis","Travers","Ross","Wood","Eaton","Hardy","Kirby","Oswald","Trent","Torrent","Roswell","Ebenezer","Harlan","Harland","Kirk","Church","Otis","Trevor","Roy","Edan","Harley","Kit","Owen","Well-Born","Tristan","Sorrowful","Royce","Kingly","Edgar","Harold","Harry","Kody","Helpful","Troy","Rufus","Red-Haired","Edric","Harris","Harrison","Konrad","Truman","Rupert","Edmond","Edmund","Hartley","Kurt","Tyler","Russell","Red","Edward","Eddie","Heath","Heathcliff","Kyle","Udolf","Ryan","Edwin","Hector","Steadfast","Lambert","Unwin","Nonfriend","Efrain","Henry","Lamont","Lawyer","Uriah","Egan","Ardent","Herbert","Lancelot","Land","Egbert","Herman","Landon","Owner","Egerton","Homer","Landry","Egil","Horace","Horatio","Timekeeper","Lane","Elbert","Howard","Lars","Eldon","Respected","Hubert","Laurence","Eldwin","Hugh","Hugo","Fire","Lee","Meadow","Eli","Ely","Elijah","Humphrey","Leith","Wide","Elias","Hunter","Leonard","Leo","Leon","Eliot","Elliott","Ian","Leroy","Ellery","Cheerful","Igor","Leslie","Elmer","Awe-Inspiring","Irvin","Irving","Lester","Elroy","Royal","Isaac","Laughter","Lincoln","Elton","Isaiah","Lionel","Lion-like","Elvis","Ivan","Lloyd","Grey","Emerson","Emery","Industrious","Iver","Ivar","Archer","Logan","Emmanuel","God-like","Ives","Lombard","Long-Beard","Emmett","Louis","Lewis","Emrick","Immortal","Lowell","Enoch","Lucas","Luke","Luminous","Eric","Erik","Luther","Ernest","Vigour","Lyndon","Errol","Erskine","Erwin","Esmond","Ethan","Ethanael","Constant","Firm","Ethen","Endurance","Eugene","Evan","Everett","Ezra","Fabian","Fairfax","Falkner","Farley","Farrell","Felix","Prosperous","Fenton","Ferdinand","Fergal","Fergus","Ferguson","Ferris","Finbar","Fitzgerald","Fleming","Fletcher","Floyd","Forbes","Forrest","Woodsman","Foster","Cunning","Francis","Free","Frank","Frasier","Strawberry","Frederick","Freeman"}; + private static String[] femaleNames = {"Abigail","Barbara","Bobbie","Strange","Danielle","Echo","Faith","Gabrielle","Haley","Hayley","Heroine","Ida","Idelle","Happy","Jacqueline","Kacey","Eagle-Eyed","Lacey","Mabel","Amiable","Nadia","Nadine","Hope","Ada","Prosperous","Beata","Blessed","Daphne","Eda","Wealthy","Fannie","Free","Gale","Lively","Hanna","Hannah","Imogen","Imogene","Imagine","Jade","Jewel","Kara","Lane","Madeline","Nancy","Grace","Adelaide","Noble","Beatrice","Beatrix","Darlene","Edana","Fiery","Farrah","Fara","Gaye","Lighthearted","Harriet","Ingrid","Meadow","Jane","Karen","Karena","Lara","Madge","Naomi","Delightful","Adrienne","Becky","Davida","Edeline","Fawn","Geneva","Harley","Irene","Peace","Janet","Kate","Pure","Larina","Magda","Magdalene","Natalie","Agatha","Belinda","Pretty","Dawn","Edith","Faye","Fairy","Genevieve","Humble","Harmony","Iris","Janice","Katherine","Kathy","Kathleen","Katrina","Larissa","Cheerful","Maggie","Nathania","Agnes","Gentle","Belle","Bella","Beautiful","Deborah","Edlyn","Noblewoman","Fedora","Georgette","Hattie","Ivy","Jasmine","Flower","Kay","Rejoicing","Laura","Laurel","Loralie","Lauren","Maia","Star","Nell","Light","Aileen","Bernadette","Deirdre","Sorrow","Edna","Pleasure","Felicia","Georgia","Georgiana","Hazel","Commander","Ivory","Jeanne","Kayla","Kayleigh","Laverna","Maisie","Precious","Nerissa","Aimee","Beloved","Bernice","Delilah","Edwina","Fern","Geraldine","Heather","Jemima","Keely","Beauty","Leah","Leigh","Weary","Mandy","Nerita","Alanna","Fair","Bertha","Berta","Denise","Effie","Fiona","Germaine","Armed","Helen","Helena","Jennifer","Kelsey","Warrior","Leanne","Marcia","Mark","Nessa","Nessia","Alarice","Bertina","Bright","Shining","Diana","Diane","Eileen","Flora","Gertrude","Henrietta","Jessica","Jessie","Kendra","Wise","Lee","Lea","Margaret","Nicolette","Nicole","Alda","Rich","Beryl","Dominica","Elaine","Frances","Francesca","Gilda","Hetty","Kerri","Dark-Haired","Leslie","Margot","Nina","Mighty","Alexandra","Bess","Dominique","Eleanor","Freda","Frida","Peaceful","Gillian","Hilda","Jillian","Jill","Kirstyn","Kirsten","Leticia","Joy","Maria","Marie","Marian","Marilyn","Noelle","Alice","Beth","Bethany","Donna","Elena","Frederica","Gladys","Lame","Holly","Joan","Kyla","Lovely","Lilah","Lillian","Lilly","Marnia","Nola","Alina","Bettina","Dora","Elga","Gloria","Glorious","Honey","Jocelyn","Joyce","Just","Linda","Marissa","Nora","Norine","Honour","Alison","Beverly","Doris","Elise","Glynnis","Optimistic","Joanna","Linette","Graceful","Marta","Martha","Norma","Alma","Nourishing","Bianca","White","Drucilla","Eliza","Hortense","Gardener","Josephine","Lindsay","Martina","Warlike","Nydia","Amanda","Loveable","Blair","Elizabeth","Guinevere","Delight","Lisa","Liza","Mary","Amaryllis","Fresh","Sparkling","Blanche","Ella","Elfin","Gwen","Gwendolyn","Judith","Judy","Praised","Livia","Matilda","Amber","Blythe","Ellen","Gwynne","Juliana","Julia","Youthful","Lizzie","Maude","Anastasia","Bonnie","Eloise","Julie","Juliet","Lois","Maura","Dark","Andrea","Brenda","Flame","Elsie","Gaiety","June","Lola","Lolita","Maureen","Angela","Angelic","Briana","Elvira","Justine","Lorelei","Mavis","Song-Thrush","Angelica","Brigid","Bridget","Emeline","Industrious","Lorena","Maxine","Anita","Brittany","Britney","Emily","Ambitious","Lorraine","Megan","Great","Ann","Anne","Mercy","Brooke","Emma","Ancestress","Louisa","Louise","Melanie","Annabelle","Erika","Powerful","Regal","Lucia","Luciana","Lucille","Melinda","Grateful","Annette","Ernestine","Lucinda","Lucy","Melissa","Anthea","Flower-Like","Esmeralda","Lulu","Melody","April","Erin","Luna","Melvina","Handmaiden","Ariana","Silvery","Estelle","Lynn","Compassionate","Arleen","Estra","Meris","Astrid","Ethel","Merle","Blackbird","Audrey","Strong","Eudora","Michelle","Eugenia","Mildred","Eunice","Millicent","Strength","Eva","Eve","Evelyn","Minerva","Mirabelle","Miranda","Admirable","Miriam","Rebellious","Misty","Moira","Molly","Mona","Solitary","Monica","Counsellor","Mora","Blueberry","Morgan","Muriel","Myrrh","Myra","Wonderful","Myrtle","Octavia","Eighth","Page","Attendant","Queen","Queenie","Rachel","Female","Sabrina","Brina","Udele","Tabitha","Gazelle","Valda","Wanda","Vandal","Yolanda","Zea","Grain","Odette","Pamela","Quenna","Ramona","Sacha","Ula","Talia","Blooming","Valerie","Healthy","Wenda","Wendy","Wanderer","Yvette","Zelda","Olga","Holy","Pandora","Gifted","Questa","Searcher","Rebecca","Bound","Sadie","Princess","Ulrica","Tamara","Vanessa","Butterfly","Whitney","Island","Yvonne","Zelene","Sunshine","Olivia","Olive","Pansy","Quinella","Quintana","Regina","Queenly","Salena","Salt","Ulva","Wolf","Tammy","Perfect","Vania","Wilda","Zera","Seeds","Opal","Gemstone","Patience","Virtuous","Quintessa","Essence","Renata","Renee","Sally","Una","One","United","Tanya","Veleda","Willa","Zoe","Ophelia","Serpent","Patricia","Rhea","Earth","Salome","Unity","Tara","Tower","Vera","Willette","Oprah","Patty","Rhoda","Samantha","Listener","Ursa","Tasha","Verda","Spring-like","Willow","Oriel","Orlena","Paula","Paulette","Small","Rita","Sandra","Ursula","Tatum","Spirited","Veronica","Wilona","Desired","Orlantha","Pearl","Roberta","Famous","Sapphire","Teresa","Teri","Harvester","Victoria","Victorious","Winifred","Orva","Peggy","Peg","Robin","Sarah","Tess","Violet","Winona","Penelope","Weaver","Rosa","Scarlett","Red","Thalia","Virginia","Maiden","Wynne","Philippa","Rose","Rosalie","Selene","Selena","Thea","Divine","Vita","Philomena","Nightingale","Rosalind","Serena","Serene","Thelma","Nursing","Vivian","Vivianne","Life","Phoebe","Rosanne","Shana","Theodora","Phyllis","Rosemary","Shannon","Thomasina","Polly","Rowena","Sharon","Plains","Thora","Thunder","Primavera","Roxanne","Sheila","Tiffany","Primrose","Ruby","Shirley","Tilda","Priscilla","Dutiful","Ruth","Sibley","Timothea","Prudence","Prudent","Sibyl","Sybil","Tina","Prunella","Silver","Tracy","Fighter","Simona","Simone","Trina","Sirena","Trista","Trixie","Trix","Tuesday"}; + + /** + * 随机获取英文名 + * @param count 需要生成的数量 + * @param gender 性别 0: 不指定 1: 男 2: 女 + * @return + */ + public static String[] generateEname(int gender, int count) { + String[] names; + if (gender == 0) { + names = ArrayUtils.concat(maleNames, femaleNames); + } else if (gender == 1) { + names = maleNames; + } else { + names = femaleNames; + } + ArrayUtils.shuffle(names); + return Arrays.copyOf(names, count); + } + + public static String generateRandomOne() { + return UUID.randomUUID().toString().substring(0, 7); + } + public static String[] generateRandom(int count) { + String[] names = new String[count]; + for (int i = 0; i < names.length; i++ ) { + String name = UUID.randomUUID().toString().substring(0, 7); + names[i] = name; + } + return names; + } +} diff --git a/app/src/org/cocos2dx/javascript/AppActivity.java b/app/src/org/cocos2dx/javascript/AppActivity.java index 9fed9b6..4328eb3 100755 --- a/app/src/org/cocos2dx/javascript/AppActivity.java +++ b/app/src/org/cocos2dx/javascript/AppActivity.java @@ -26,10 +26,13 @@ package org.cocos2dx.javascript; import android.content.Intent; import android.content.res.Configuration; +import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import com.google.firebase.analytics.FirebaseAnalytics; import com.jc.jcfw.JcSDK; +import com.jc.jcfw.db.DaoMaster; +import com.jc.jcfw.db.DaoSession; import com.tencent.bugly.crashreport.CrashReport; import org.cocos2dx.lib.Cocos2dxActivity; @@ -38,6 +41,7 @@ import org.cocos2dx.lib.Cocos2dxGLSurfaceView; public class AppActivity extends Cocos2dxActivity { public static AppActivity app; private FirebaseAnalytics mFirebaseAnalytics; + private DaoSession daoSession; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -50,6 +54,7 @@ public class AppActivity extends Cocos2dxActivity { return; } app = this; + intGreenDao(); // DO OTHER INITIALIZATION BELOW mFirebaseAnalytics = FirebaseAnalytics.getInstance(this); CrashReport.initCrashReport(getApplicationContext(), "76b5e35530", false); @@ -151,4 +156,13 @@ public class AppActivity extends Cocos2dxActivity { public FirebaseAnalytics getmFirebaseAnalytics() { return mFirebaseAnalytics; } + private void intGreenDao() { + DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "sweet.db"); + SQLiteDatabase db = helper.getWritableDatabase(); + DaoMaster daoMaster = new DaoMaster(db); + daoSession = daoMaster.newSession(); + } + public DaoSession getDaoSession() { + return daoSession; + } } diff --git a/app/sweet.iml b/app/sweet.iml index 80bfa1b..e0c7533 100644 --- a/app/sweet.iml +++ b/app/sweet.iml @@ -165,6 +165,7 @@ + @@ -240,8 +241,10 @@ + + diff --git a/build.gradle b/build.gradle index 7908732..715245f 100755 --- a/build.gradle +++ b/build.gradle @@ -5,11 +5,12 @@ buildscript { repositories { google() jcenter() + mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:3.3.0' classpath 'com.google.gms:google-services:4.3.3' // Google Services plugin - + classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0' // add plugin // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files }